Форум сайта python.su
88
Если обращение к элементам дерева идёт по константным индексам, что-то нетак в датском королевстве.
Но если нужно, вот ещё вариант:
def return_something(some_dict) l0 = 'very_long_key' l1 = 'another_very_long_key' l2 = 'the_longest_key' return some_dict[l0][l1][l2]
Офлайн
1
ShamanПодобный вариант уже предлагали.
Но если нужно, вот ещё вариант:
reclosedevdef 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']
Отредактировано prokoptsev (Март 16, 2013 09:26:13)
Офлайн
88
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]
Отредактировано Shaman (Март 16, 2013 09:36:59)
Офлайн
1
Я не гуру питона, по этому пусть меня поправят если я не правильно говорю.
Когда вы определяете константу, вы выделяешь в памяти под нее место. В данном случае вы выделяете 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]
...Явное лучше, чем неявное... ...Простое лучше, чем сложное... ...Читаемость имеет значение...
Офлайн
Если в теле функции в локальную переменную записывается какое-то промежуточное содержимое, то это совсем не константа, эта переменная умрет с отработкой функции. Очень часто случается, что так и нужно делать, чтобы получить читаемый код.
Офлайн
1
А какой на ваш взгляд код более читабельный и более правильный?
Первый вариант:
reclosedevВторой вариант:def return_something(some_dict): return (some_dict['very_long_key'] ['another_very_long_key'] ['the_longest_key'])
Shamandef return_something(some_dict) l0 = 'very_long_key' l1 = 'another_very_long_key' l2 = 'the_longest_key' return some_dict[l0][l1][l2]
Офлайн
я в подобных случаях делаю как в первом варианте. Все ясно и читаемо.
Офлайн