Змея / Говнокод #16145 Ссылка на оригинал

0

  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 hugr, (Updated )

Комментарии (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 как-то специально подготавливает чего там автор хотел получить. Может это часть сериализации какой-нибудь, типа Ясона, где нужно предварительно ключи в строки конвертировать или что-то такое.
                Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8