Скажем, у меня есть словарь, и я хочу проверить, не привязан ли ключ к непустому значению. Одним из способов сделать это будет функция len:
mydict = {"key" : "value", "emptykey" : ""}
print "True" if len(mydict["key"]) > 0 else "False" # prints true
print "True" if len(mydict["emptykey"]) > 0 else "False" # prints false
Однако можно полагаться на семантику Python, и как если бы объект был определен, он оценивал значение true и не оставлял вызов len:
mydict = {"key" : "value", "emptykey" : ""}
print "True" if mydict["key"] else "False" # prints true
print "True" if mydict["emptykey"] else "False" # prints false
Однако я не уверен, что больше Pythonic. Первый считает, что "явный лучше, чем неявный", однако второй считает, что "простой лучше, чем сложный".
Я также задаюсь вопросом, может ли отказ от вызова len укусить меня, поскольку я использую dict, который не обязательно содержит строки, но может содержать другие доступные типы (списки, наборы и т.д.). OTOH, в первом (с вызовом len), если None будет сохранен как значение, код будет взорван, тогда как версия non-len будет работать как ожидалось (будет eval до false).
Какая версия более безопасна и более Pythonic?
Изменить: уточнить предположения: я знаю, что ключ находится в словаре, и я знаю, что значения будут доступными. Я также не могу избежать ввода значений нулевой длины в словарь.
Редактировать # 2: Кажется, что людям не хватает точки моего вопроса. Я не пытаюсь определить самый Pythonic/самый безопасный способ проверки наличия ключа в словаре, я пытаюсь проверить, имеет ли значение нулевой длины или нет