2012-01-04 9 views
5

私はしばしば以下のif/elseの構文に苦しんでいます。私はいくつかの人々が自分の意見をより明確に思うか、これがPythonisms (私は検索して何かを見つけることができませんでした)。Python Dictsから値を取得するときにElseのスタイル

これらのいずれかが良いか間違っていますか間違っていますか?

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

some_func(value=value) 

OR:

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

some_func(value=value) 

OR:

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

私はすべての理由を見ることができました。

答えて

8

当然のことながら、最後の1つは、dict.getの正確なケースです。

ジャストノート - 二番目のパラメータgetには不必要である、あなたは、単に書くことができます。

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

をこれは私にとって最も自然に見える:

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

または:最後のケースを。私が答えている間、質問は編集されました。

1

3番目の例のように、dictのget()メソッドを使用します。そのユースケースはまさにその前提です。

0

これは単にスタイルの問題ですが、私はそれがよりsuccint(と、それはデフォルトであるとして、あなたがNoneを省略することができます注意してください)だという理由だけで、最後に使用し

ところで、このもあります:

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

でもそれはちょうど.get()があります

0

他の人が言ったように、dict.get()メソッドが必要なものに適しているようです。 (EAFP principleによる)

しかし、値がdictionnaryになかった場合は、メソッドを起動したくなかった場合は、ニシキヘビの方法があったであろう:

try: 
    some_func(some_dict['value']) 
except KeyError: 
    pass 
関連する問題