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

    −99

    1. 1
    2. 2
    3. 3
    def dict_to_tuple(d):
        """Converts an ordered dict into a tuple."""
        return tuple(dict_to_list(d))

    Запостил: hugr, 11 Июня 2014

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

    • На первый взгляд все окей, в чем проблема то?
      Ответить
      • В абсурдности самих функций dict_to_tuple и dict_to_list.

        Ведь на самом деле это что-то в духе dict_keys_to_tuple ([key1, key2, ...]) или dict_values_to_tuple ([val1, val2, ...]) или dict_pairs_to_tuple ([(key1, val1), (key2, val2) ...]) или даже что-то такое: ([key1, val1, key2, val2, ...]). Но из названия и докстринга совсем не понятно, что именно имел в виду автор.
        Ответить
        • Та ну, нашли тоже проблему. Может там из общего оформления понятно каким именно образом переводятся словари в списки ит.п. В том же подчерке никто даже не задумывался о таких вещах.
          Ответить
          • > В том же подчерке никто даже не задумывался о таких вещах.
            И что именно там вернули? :) И всяко там в доке написано не "преобразует словарь в массив", а что-то более точное...

            Вот взять тот же for по словарю - в крестах он возвращает пары из ключа и значения, в жс - ключи, в пыхе - ключи или пары из ключа и значения. И назвать все эти штуки просто "обходом словаря" и писать в мане "обходит словарь" было бы опрометчиво.

            Из-за этой неоднозначной херни мне и не нравится понятие "преобразование типов". Для чего-то сложнее арифметики оно работает со скрипом, и только после чтения манов.
            Ответить
            • errata:
              - в пыхе - ключи или пары из ключа и значения
              + в пыхе - значения или пары из ключа и значения
              Ответить
            • Значения.

              Ну на каком-то уровне нужно просто запомнить как и что делает используемая библиотека. Может не идеальное название, а с другой стороны, если все писать в названии, то нужно было бы что-то типа
              pairs_of_dict_ordered_in_insertion_order_to_tuple_in_same_order
              . А потом еще можно в названии уточнить как именно порядок добавления обрабатывался конкурирующими потиками и т.д. Где-то все равно прийдется остановиться.
              Ответить
              • > Значения.
                А какой функцией там это делается, если не секрет? Не _.values() случаем? :)

                > как именно порядок добавления обрабатывался конкурирующими потиками
                Если не хочется фиксировать порядок - в доке достаточно фразы "порядок не определен, не полагайтесь на него".

                > Где-то все равно прийдется остановиться.
                Здесь согласен. Но останавливаться в самом начале пути тоже не самое удачное решение...
                Ответить
                • Так по такому же принципу можно в документации написать, что функция вернет только значения, или пары и т.д.
                  Ответить
                  • > можно в документации написать, что функция вернет только значения, или пары и т.д.
                    Ну так это уже огромный шаг вперед по сравнению с "функция преобразует любую хуиту в массив"... Эдак можно вообще скатиться до фразы "это функция, она принимает аргументы и возвращает значения".

                    P.S. Может быть у меня крестоблядская профдеформация, но видя в доке фразу "функция преобразует нечто в массив" я вижу только unspecified behavior или, в лучшем случае, implementation defined. И тупо не смогу этой функцией воспользоваться. Сегодня на тесте она возвращает ключи, но кто знает, вдруг завтра она начнет возвращать значения? И если в доке ничего не написано о порядке - я читаю это только как "порядок не определен". Даже если на входе OrderedDict.

                    Доктор, это излечимо?
                    Ответить
          • > В том же подчерке никто даже не задумывался о таких вещах.
            Ну вот открыл ман по подчерку, а там...

            _.keys()
            _.values()
            _.pairs()

            Действительно, в том же подчерке никто даже не задумывался о таких вещах, и вместо дебильного object_to_array сделали 3 интуитивных и наглядных функции.
            Ответить
            • _.toArray({x: 10, y: 20 }); // [10, 20]


              Так а кто говорит, что в Питоне у OrderedDict нету штатной возможности получить пары, ключи и значения? Конечно есть.
              Ответить
              • http://underscorejs.org/#toArray
                _.toArray(list)
                Creates a real Array from the list (anything that can be iterated over). Useful for transmuting the arguments object.


                Збс. Т.е. я должен методом проб и ошибок узнавать, что именно делает эта функция? Prayer-based programming какой-то.
                Ответить
                • Ну это не я ее писал. Я только объяву разместил.
                  Ответить
              • > Конечно есть.
                Ну а нахер тогда вообще этот dict_to_list сдался?

                Если бы это была полиморфная функция to_list(), которая может преобразовать в список даже солнце, даже небо, даже Аллаха - то смысл бы еще был... Но раз она работает только на упорядоченных списках, а у них такая уже есть - то в чем вообще смысл ее существования?
                Ответить
                • Ну я не знаю, может dict_to_list как-то специально подготавливает чего там автор хотел получить. Может это часть сериализации какой-нибудь, типа Ясона, где нужно предварительно ключи в строки конвертировать или что-то такое.
                  Ответить

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