Найти - Пользователи
Полная версия: PEP8 и словари большой вложенности
Начало » Python для новичков » PEP8 и словари большой вложенности
1 2
Shaman
Если обращение к элементам дерева идёт по константным индексам, что-то нетак в датском королевстве.
Но если нужно, вот ещё вариант:
def return_something(some_dict)
    l0 = 'very_long_key'
    l1 = 'another_very_long_key'
    l2 = 'the_longest_key'
    return some_dict[l0][l1][l2]
prokoptsev
Shaman
Но если нужно, вот ещё вариант:
Подобный вариант уже предлагали.
reclosedev
def return_something2(some_dict):
    some_meaningful_name = some_dict['very_long_key']
    which_self_documents_code = some_meaningful_name['another_very_long_key']
    return which_self_documents_code['the_longest_key']

И если бы имена ключей использовались еще где-нибудь, то ваш вариант имеет место быть, но в моем случае это будут одноразовые константы, что как-то не очень правильно.
Shaman
prokoptsev
И если бы имена ключей использовались еще где-нибудь, то ваш вариант имеет место быть, но в моем случае это будут одноразовые константы, что как-то не очень правильно.
L0 = 'very_long_key'
L1 = 'another_very_long_key'
L2 = 'the_longest_key'
def return_something(some_dict)
    return some_dict[L0][L1][L2]
а так будет правильнее?
prokoptsev
Я не гуру питона, по этому пусть меня поправят если я не правильно говорю.

Когда вы определяете константу, вы выделяешь в памяти под нее место. В данном случае вы выделяете 3 текстовые константы в пространстве имен, что бы обратиться по ним к параметру в словаре в одном единственном месте.
Другое дело, если бы вы использовали константу в нескольких местах. Например так:
L0 = 'very_long_key'
L1 = 'another_very_long_key'
L2 = 'the_longest_key'
def return_something_1(some_dict)
    return some_dict[L0][L1][L2]
def return_something_2(some_dict_reverse)
    return some_dict[L2][L1][L0]

В общем, вариант со скобками мне понравился больше так как не надо писать функций, оберток и определять констант. Такой способ проходит проверку на pep8 и, на мой взгляд, соответствует дзену питона:
...Явное лучше, чем неявное...
...Простое лучше, чем сложное...
...Читаемость имеет значение...
dimy44
Если в теле функции в локальную переменную записывается какое-то промежуточное содержимое, то это совсем не константа, эта переменная умрет с отработкой функции. Очень часто случается, что так и нужно делать, чтобы получить читаемый код.
prokoptsev
А какой на ваш взгляд код более читабельный и более правильный?
Первый вариант:
reclosedev
def return_something(some_dict):
    return (some_dict['very_long_key']
                     ['another_very_long_key']
                     ['the_longest_key'])
Второй вариант:
Shaman
def return_something(some_dict)
    l0 = 'very_long_key'
    l1 = 'another_very_long_key'
    l2 = 'the_longest_key'
    return some_dict[l0][l1][l2]
dimy44
я в подобных случаях делаю как в первом варианте. Все ясно и читаемо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB