1. Python / Говнокод #26017

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    Building on that example, the new syntax for function definitions would look like:
    
    def name(positional_only_parameters, /, positional_or_keyword_parameters,
             *, keyword_only_parameters):
    
    Therefore the following would be valid function definitions:
    
    def name(p1, p2, /, p_or_kw, *, kw):
    def name(p1, p2=None, /, p_or_kw=None, *, kw):
    def name(p1, p2=None, /, *, kw):
    def name(p1, p2=None, /):
    def name(p1, p2, /, p_or_kw):

    https://www.python.org/dev/peps/pep-0570

    Запостил: 3.14159265, 07 Ноября 2019

    Комментарии (92) RSS

    • Питуль, пока ты тут, скажи свой email для экстренной связи.
      Ответить
    • Это серьёзно?

      Сначала мы вводим в язык именованные аргументы.
      Затем, через N версий чешем затылок и делаем новую синтаксическую питушню чтобы с ними бороться.
      Ответить
      • В перле нет именованнных аргументов
        И в руби тоже можно сказать, что нет

        Импенно потому я за шел, где их тоже нет

        Зато в обжси все аргументы именнованне
        Именно потому я за обжси
        Ответить
        • Ерунду написал.

          Именованные аргументы можно перечислять в произвольном порядке, попробуй так сделать в obj-c.
          Ответить
          • Ерунду написал.

            Именованные аргументы можно перечислять только после неименованных
            Ответить
            • Когда нет мозгов, то можно и покривляться, согласен.
              Ответить
              • Тебе видней, что в таком случае делать.
                Ответить
                • Бомбит от того, шо не знаешь обжектив-сей?
                  Ответить
                  • Бомбит от того, шо попытался выебнуться, и обосрался?
                    Ответить
                    • Давай лучше пример сигнатуры функции в obj-c с именованными параметрами, порядок передачи которых в функцию при вызове не имеет значения.

                      Остальные вскукареки оставь для друзей, пожалуйста
                      Ответить
                      • Причем тут порядок, дурачок?
                        На кой хуй ты его вообще сюда принес?

                        Смысл именованных параметров в том, чтоб понимать какой параметр какое значение имеет.
                        Ответить
                        • Предлагаю тебе перестать долбиться в глаза, прочитать первый ответ guest8 в этой ветке и понять, что дурачок твой папа, а в обжективе нет никаких "именованных" параметров.

                          Ты хоть вообще понимаешь разницу между сигнатурой функции и типом данных "словарь"? А то шото не похоже
                          Ответить
                          • Лол, причем тут вообще словарь?

                            Именованные параметры позволяют не писать
                            doAll(true, true, true, false, true, 42);

                            А вместо этого писать
                            doAll(useShovel=true, useHands=true, iq=42);


                            Языки, где такое есть:
                            * Python
                            * ObjC (тут нет НЕ именованных аргументов, в отличие от других)
                            *Kotlin

                            Языки, где такого нет:
                            * Java (но можно эмулировать объектом)
                            * JavaScript (но можно эмулировать объектом)
                            * C (но можно эмулировать структурой)

                            Языки, где такого нет, но почти всегда эмулируется ссылкой на хеш/дикт

                            * Ruby (даже сахар для этого есть)
                            * Perl (частично)


                            Менять порядок указанных аргументов в ObjC действительно нельзя (во всех остальных приведенных тут языках -- можно), но дело-то не в этом
                            Ответить
                            • Но можно эмулировать комментарием ))
                              Ответить
                              • Именно. Вот пример от M$
                                // Start the child process. 
                                    if( !CreateProcess( NULL,   // No module name (use command line)
                                        argv[1],        // Command line
                                        NULL,           // Process handle not inheritable
                                        NULL,           // Thread handle not inheritable
                                        FALSE,          // Set handle inheritance to FALSE
                                        0,              // No creation flags
                                        NULL,           // Use parent's environment block
                                        NULL,           // Use parent's starting directory 
                                        &si,            // Pointer to STARTUPINFO structure
                                        &pi )           // Pointer to PROCESS_INFORMATION structure
                                    ) 
                                    {
                                        printf( "CreateProcess failed (%d).\n", GetLastError() );
                                        return;
                                    }
                                Ответить
                              • При этом никакой гарантии соответствии комментария реальности нету.
                                Ответить
                                • Но можно написать проверку через std::embed
                                  Ответить
                                  • Через std::embed и __LINE__ походу можно даже что-нибудь типа eval() пильнуть...
                                    Ответить
                                  • Можно написать через std::embed компил-тайм статический анализатор, который к тому же сам себя анализирует
                                    Ответить
                            • Просто погугли, что такое kwargs в пистоне и существует ли в ObjC и Свифте перегрузка методов.

                              У тебя почему-то в голове каша из топора и ты думаешь, что сигнатура функции это то же самое, как если функция умеет принять в себя словарь.
                              Ответить
                            • Ну и контрольный выстрел. Вот есть в UIKit'е метод
                              viewWillTransitionToSize:withTransitionCoordinator:
                              Выведешь мне из сигнатуры именованные параметры?
                              Ответить
            • Но между собой у них порядок произвольный.
              Ответить
    • Анскильный питух не осилил сишку и пошёл кушать говнецо. Брось его пока не поздно, питух.
      Ответить
      • Ты анскильная заедушная пародия на царя, иди смотри настоящие треды с участием царя на ЛОР, например https://www.linux.org.ru/forum/development/15334456 (смотреть в удаленные)
        Ответить
    • В чем, собственно, юмор?
      Ответить
    • Непонятна параша. Примеры использования есть?
      Ответить
      • в стдлибе.
        Ответить
        • I wish у гестов хоть что-то уник было
          Ответить
        • Пример как было -> чего хотим добиться -> как стало. Потому что яннп.
          Ответить
          • потому что не всегда нужно наименовывать передаваемые аргументы.

            у меня батхерт больше с нового валрус оператора. ебать редандант не дзену.
            Ответить
            • Когда это не нужно?
              Ответить
              • Тупой пример, но первое, что в голову: когда по уроцки назвал аргументы функции, которая считает сумму двух векторов. и не хочешь, чтобы хоть кто-то вызывал её как x1=x2=x3=y1=...
                Ответить
                • Ради этого нужно вводить какую-то синтаксическую парашу, которая ещё больше запутывает? Согласен с Пи, вообщем.
                  Ответить
                  • я бы тоже выкинул многое и начал бы со staticmethod
                    Ответить
                    • мамка ипаль тех, кто пользуется статик метод

                      зачем вам топлевел функции дали? вас чтоли джаваебы-шарпеи покусали?

                      вот классметод нужен
                      а статик -- нет
                      Ответить
                      • солидарен.
                        Ответить
                      • Лишнее пространство имён.
                        Ответить
                        • Клацмецод
                          Ответить
                          • А в чем там разница?
                            Ответить
                            • в том, что классмецод полезен так же для полиморфизма

                              а статик нужен ни за чем
                              Ответить
                            • Клацмецат: наследуется, не требует экземлпяра класса, юзается в фабриках и вообще крутой.
                              Статикметод: нахуй никому не нужен и является признанной ошибкой светлоликого Гuido.
                              Ответить
                              • Почему в плюсах он нужен, а в питоне нет? В чем отличие?
                                Ответить
                                • в плюсах нет классмецода
                                  Ответить
                                  • Я видимо что-то среди этого пукаю: «метод», «клацметод», «статикметод».
                                    Ответить
                                    • В плюсах (а так же жобе и шапрее) статик метод есть у класса. Он имеет доступ к полям, общим для всех инстансов класса и для всех его потомков.

                                      class Bubarekh {
                                        public:
                                        static int petuh;
                                        static void makaka();
                                      }
                                      
                                      class Barebukh: public Bubarekh {}


                                      Тут макаку можно вызвать и у баребуха, и у бубареха.
                                      Она будет иметь доступ к петуху, но в самом методе невозможно будет узнать вызван ли ты для бубареха или баберуха.

                                      В питончике же есть третий вид метода -- класс метод.
                                      Он параметтризуется классом.

                                      class Baberukh:
                                          pass
                                      
                                      class Burabekh(Baberukh):
                                          @classmethod
                                          def abezjana(cls):
                                              print(f"Me {cls}")


                                      То-есть метод может поразному вести себя в зависимости от класса.

                                      Например, можно сделать фабричный метод

                                      @classmethod
                                      def create(cls):
                                          return cls(42)


                                      В крестах это можно шаблонами, а жабы и щапры смокчут хуйца
                                      Ответить
                                • паблик статик метод класса в плюсах тоже не имеет экземпляра, но имеет доступ к атрибутами класс. эт как свойцтва.
                                  Ответить
                                  • В плюсах свойства лежат только в том классе, где они определены. Ты не можешь сделать вот так в крестах

                                    class Petuh:
                                        name = None
                                    
                                        @classmethod
                                        def set_name(cls, name):
                                            cls.name = name
                                    
                                    
                                    class Tsyplenok(Petuh):
                                        pass
                                    
                                    
                                    Petuh.set_name("Petr")
                                    Tsyplenok.set_name("Petya")
                                    
                                    print(Petuh.name)
                                    print(Tsyplenok.name)
                                    Ответить
                        • зачем?
                          Ответить
                • > когда по уроцки
                  - на уроцке по программированиема
                  Ответить
            • >>> help(pow)
              ...
              pow(x, y, z=None, /)
              ...
              
              >>> pow(x=5, y=3)
              Traceback (most recent call last):
                File "<stdin>", line 1, in <module>
              TypeError: pow() takes no keyword arguments
              Ответить
            • если честно, то я считаю что нименованными могут быть два аргумента
              Более двух должны быть именованными

              мамка ипаль тех, кто делает функции с девятью булевыми неименнванными аргументами
              Ответить
              • Видимо для таких будут аргументы после слеша, если я правильно понял.
                Ответить
                • перед слешем могут быть только порядковые аргументы
                  потом любые
                  а после астериска (и абелиска) будут только именованные аргументы
                  Ответить
    • Кто-то может привести пример вызова функции со всеми тремя типами оргументов?
      Ответить
    • 3,14дар, иди в армию, 3,14дар!
      Ответить
      • что за хейт к пи туху?
        Ответить
        • В Ирзаиле есть город Питух Тыква

          Там живет сивоконь
          Ответить
          • Рябоконь
            Ответить
            • Ставьте плюс, кто знает его фамилию: https://cs.pikabu.ru/images/big_size_comm/2012-10_5/13510350872031.jpg
              Ответить
              • Гришечкин его фамилия.

                Я даже помню рекламные плакаты:
                ТЫ ежедневно на телеканале:
                СОЛДАТЫ
                ТУРИСТЫ
                СТУДЕНТЫ

                «Туристы» оказались полной лажей. Вообще ничего не запомнил оттуда.
                «Студенты» — тоже не очень удачный сериал.
                А вот из «Солдатов» люди начали тащить шуточки.
                Ответить
    • В 461 году до н. э., когда произошли землетрясения и появилась говорящая корова, а с неба стали падать куски мяса, которые поедали птицы, решено было поручить дуумвирам по священным делам обратиться к Сивиллиным книгам

      В 200 году до н. э. обращение к книгам было вызвано появлением чудовищных животных вроде поросёнка с человечьей головой, а также двуполых младенцев, которых утопили в море

      В 125 году до н. э. в Риме родился андрогин, и сенат обратился к книгам, в которых были найдены указания на жертвоприношени
      Ответить
    • Я почему-то вспомнил фразу: «Если тебе нужен „PL/1“, ты знаешь, где его взять».
      Ответить

    Добавить комментарий