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

    −22

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    NULL = object()
    #...
        def css_one(self, path, default=NULL):
            """
            Get first element which matches the given css path or raise DataNotFound.
            """
    
            try:
                return self.css_list(path)[0]
            except IndexError:
                if default is NULL:
                    raise DataNotFound('CSS path not found: %s' % path)
                else:
                    return default

    Зачем? Чем None не устроил?

    Запостил: 3_14dar, 28 Сентября 2015

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

    • Null это неООПешно
      Ответить
      • А None?
        Ответить
      • Человек видно хотел, чтобы .css_one(path, None) возвращало None. Стоит ли так делать?
        Ответить
        • А что плохого, пользователь же сам захотел, сам указал и почти что принёс заявление и справку о том, что ему действительно нужно вернуть None - так и пусть получает.
          Я бы, естественно, тихо возвращал бы None по умолчанию, но раз тут питон-эксепшн-стайл и код должен быть подобен изрядно подвыпившей девице на каблуках, то пусть так и будет.
          Вон в jQuery сеттеры не могут назначить undefined потому, что считают, что им не передали аргумент, и становятся геттерами. А тут явный None, красота.
          Ответить
          • Ахах, а у вас же 2 null-а: null и undefined.
            Ответить
          • Зато в крестах get(key) и get(key, default) замечательно уживаются.
            Ответить
        • > Стоит ли так делать?
          А больше ты это никак и не сделаешь... Или вопрос в том, стоит ли вообще допускать None на выход?
          Ответить
          • Можно вернуть два значения: само значение и факт его наличия в коллекции.
            Ответить
    • 3_14dar, ты всё-таки пошел напитон, пидар?
      Ответить
      • Ты почему ядро не конпелируешь, пидар?
        Ответить
        • Пидар - это ты, а ядро в маке компилировать не нужно. Да и в линуксе тоже, оно из коробки работает и содержит все нужные драйвера.
          Ответить
          • У-у, так ты еще и макоблядь? Тогда иди нафаллос, надкусант-пидор! Так это в нем ты смотришь что обновлять а что нет?
            Ответить
    • def css_one(self, path, *default):
          """
          Get first element which matches the given css path or raise DataNotFound.
          """
          try:
              return self.css_list(path)[0]
          except IndexError:
              if not default:
                  raise DataNotFound('CSS path not found: %s' % path)
              else:
                  return default[0]

      http://ideone.com/J5yoiw
      Ответить
      • И теперь функция тихо игнорирует лишние параметры.
        Ответить
        • if (len(default) > 1):
            raise Execption("А так?")
          Ответить
        • В этом же нет ничего плохого. Или в питоне как в хаскеле все функции от одного аргумента?
          Ответить
          • ecmaблядь закукарекала
            Ответить
            • Так в чём багор сего вопроса?
              Ответить
              • В динамической питушизации. Функция из топика фейлится, если ей передать 0, 1 или 4+ аргументов, и это хорошо. Функция Столлмана молча жрёт лишние аргументы, и это хуёво, т.к. может случайно скрыть ошибку.

                P.S. Хотя экмадрочерам к подобному поведению не привыкать.
                Ответить
                • > В динамической питушизации
                  Да она тут слабо влияет. Был бы printf сишный, были бы те же разговоры.

                  > т.к. может случайно скрыть ошибку.
                  Ну, если аргумент недодали и функция пропускает, то ещё ладно, могут быть проблемы. А тут-то он лишний! Без него работало, с ним тоже работает, красота.
                  Ответить
                  • > Был бы printf сишный
                    А никто и не собирается защищать это небезопасное говно... Если бы не ворнинги от компилятора - юзать вообще было бы страшно.
                    Ответить
                  • > красота
                    Не понимаю я такой красоты... Имхо, нарушивший контракты код должен дохнуть как можно раньше. В идеале - во время компиляции.
                    Ответить
                    • Но... Как же баш?
                      Ответить
                      • > Как же баш
                        Если честно - ёбаная срань, которую юзать не хочется для чего-то сложнее копирования пары файликов. Хуже только батники и цмд.

                        Синтаксис ебанутый и некроссплатформенный (да, у sh есть несколько несовместимых говнопотомков, bash - всего лишь один из них). Надо знать о куче подводных камней. И не дай бог понадобятся регулярки...
                        Ответить
                        • Лал, а как же гегантские скрипты на баше? Как же баш - наше все?
                          >Хуже только батники и цмд.
                          Про это еще в фатальном недостатке писали, что по традиции МС в один момент дропнули cmd и с нуля создали помершелл. Да, гомнище еще то. Честно говоря, моя основная претензия как программиста к башу/цмд (одмины/эникеи/красноглазики могут тут смотреть иначе) - все - строка. Чтобы строку куда-то передать, надо ее безопасно заэскейпить итд. Помершелл при своей сравнительной сложности гораздо ближе к языку программирования, хоть и странному (результат "2"*3 и 3*"2" разный).

                          Вот нагуглилось http://stackoverflow.com/a/180630 . Изъябываемся чтобы параметр внезапно не стал ключем.
                          Ответить
                          • > Как же баш - наше все?
                            Я это писал? Покажи мне цитату.

                            > основная претензия
                            Это ты ещё регулярки не видел, где половина эскейпов вверх-ногами работает (часть символов надо эскейпить чтобы оно получили специальный смысл)... И с циклом for не работал, который по-дефолту если файлов не нашёл выполняется один раз с нераскрытой маской...

                            > Вот нагуглилось
                            Ну и это тоже, да.
                            Ответить
                            • Лично тебя я не имел в виду, это красноглазы всякие пишут.

                              >Это ты ещё регулярки не видел
                              Лол? Я знаю что это такое, мы их в треде про pyparsing обсуждали, забыл?
                              Ответить
                              • Не. То были нормальные регулярки. Значит ты точно в баше их не юзал)))
                                Ответить
                              • >> часть символов надо эскейпить чтобы оно получили специальный смысл
                                $ grep '12{2}' <<X
                                > 122
                                > 12{2}
                                > X
                                12{2}
                                $ grep '12\{2\}' <<X
                                > 122
                                > 12{2}
                                > X
                                122
                                $ grep -E '12{2}' <<X
                                > 122
                                > 12{2}
                                > X
                                122
                                Ответить
                                • Это греп. А ты в баше регулярки попробуй поюзать.
                                  Ответить
                                  • А там другие регулярки? Что ты имеешь в виду?
                                    Ответить
                                    • Там скобки надо экранировать, чтобы они обрели специальный смысл (а не наоборот, как в нормальных регулярках). И вроде что-то ещё. Но я точно не помню.
                                      Ответить
                                      • А где именно в самом баше используются регулярки?
                                        Ответить
                                        • Там встроенный оператор был какой-то. =~ что ли. Ну и expr. Но expr, если быть точным, это уже не сам баш.
                                          Ответить
                            • > Это ты ещё регулярки не видел, где половина эскейпов вверх-ногами работает
                              сразу видно, что кто-то emacsом не пользуется
                              это POSIX-синтаксис, которой исторически появился раньше PCRE, кстати
                              Ответить
                        • > баш - ёбаная срань

                          Да, мы уже с тобой как-то обсуждали этот вопрос. Баш был нужен для того, чтобы с минимальным кол-вом синтаксического шума склеивать простые глупые программы и получать результат. Кмк, это средство интерактивного взаимодействия с системой, а не средство для написания нетривиальных программ.

                          Сложные скипты на шелле - это как метапрограммирование в 98 крестах:
                          1. врядли о нём задумывались при создании
                          2. выглядит как говно
                          3. цели не всегда оправдывают средства

                          Если искать альтернативы, то не совсем понятно, чем заменить передачу данных плейнтекстом и извечный парсинг. Плейнтекст наиболее приятен глазу, но парсить его геморно.

                          Кмк, проблему могли бы решить S-выражения. Они вполне читабельные, и неплохо подходят для сериализации с минимальным оверхедом. Использование диалекта схемы в качестве интерпретатора позволило бы сильно упростить рутинные задачи вроде парсинга параметров командной строки.

                          Но не всем ведь нравятся скобочки.
                          Ответить
                          • >Сложные скипты на шелле - это как метапрограммирование в 98 крестах
                            >1. врядли о нём задумывались при создании

                            Годная метафора. Мне на ум пришла довольно пошлая, не буду озвучивать.
                            Ответить
                          • >Плейнтекст наиболее приятен глазу
                            Открыть json файлик в просмотровщике не судьба?
                            Ответить
          • Ага, просто щикарно, прямо как в PHP!
            Ответить

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