Python Если тогда стиль Else при получении значений из Dicts - PullRequest
5 голосов
/ 04 января 2012

Я часто борюсь со следующим синтаксисом if / else, и я надеялся, что некоторые люди могут высказать мне свое мнение относительно того, что они считают более понятным, или если это нарушает какие-либо Pythonism (я искал и не смогчтобы найти что-нибудь).

Является ли один из них лучше и / или правильно / неправильно?

value = None
if 'value' in some_dict:
  value = some_dict['value']

some_func(value=value)

ИЛИ:

if 'value' in some_dict:
  value = some_dict['value']
else:
  value = None

some_func(value=value)

ИЛИ:

some_func(value=some_dict.get('value', None))

Я мог видеть причины для всех.

Ответы [ 5 ]

8 голосов
/ 04 января 2012

Конечно, последняя является наилучшей - описанная ситуация является точным случаем для dict.get.

Просто примечание - второй параметр для get является излишним, вы можете просто написать:

some_func(value=some_dict.get('value'))
1 голос
/ 04 января 2012

Используйте метод dict get(), как в третьем примере.Этот вариант использования - именно то, что у него есть.

1 голос
/ 04 января 2012

Это выглядит наиболее естественно для меня:

value = some_dict.get('value')
some_func(value=value)

Или: последний случай.Вопрос был отредактирован, пока я отвечал.

0 голосов
/ 04 января 2012

Как говорили другие, метод dict.get () кажется более подходящим для того, что вам нужно.

НО, если вы не хотите запускать методесли бы значение не было в словаре, питонский путь (согласно принципу EAFP ) был бы:

try:
   some_func(some_dict['value'])
except KeyError:
   pass
0 голосов
/ 04 января 2012

это просто вопрос стиля, я бы использовал последний только потому, что он более лаконичен (и обратите внимание, что вы можете опустить None, поскольку это значение по умолчанию)

кстати, есть и следующее:

value = some_dict['value'] if 'value' in some_dict else None

но это именно то, что .get() делает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...