Безопасно ли использовать переменную цикла после цикла?
Допустим у меня есть особый словарь, о котором я знаю, что в нём с некоторым шансом может оказаться ключ пустой строки. И если в нём и в правду будет ключ пустой строки, то он всегда будет на первом месте
dict_ex = {"":"Aaa", "Bb":"b", 1:"Cc", "Ddd":123}
Если я сделаю так:
def Aaa():
for dk in dict_ex.keys():
break
if dk!="":
print(dk)
return None
Aaa()
Надёжно ли будет читать из переменной для цикла после его выполнения?
Мало ли есть какие-то подводные камни, или иные питонические прелести, о которых я не знаю.
Ответы (1 шт):
Да, в Питоне переменная цикла после окончания цикла сохраняет своё значение и доступна. Но в данном случае гораздо лучше не полагаться на особенности реализации словаря в Питоне, а использовать тот факт, что проверка наличия ключей в словаре имеет сложность O(1)
(амортизированное), т.е. если у ваших элементов словаря не вырожденный хэш, то поиск будет произведён моментально. Ну и первый элемент итерируемой коллекции можно получить без цикла for
. В общем, я бы использовал примерно такие проверки и получение 1-го элемента, если это нужно:
dict_ex = {"Bb":"b", 1:"Cc", "Ddd":123}
if "" not in dict_ex:
if dict_ex:
print(next(iter(dict_ex)))
Тут в явном виде проверяется, что ключ "" есть в словаре, что словарь не пустой, и в этом случае печатается первый из ключей.
Хотя в любом случае словарь обычно принято считать неупорядоченной структурой. И если вам нужно как-то выделить отдельный ключ, лучше бы его записывать в отдельную переменную, например.