1

Rubyでは、変数の値を条件付きで設定する場合は、次のようにすることができます。

foo = myhash[ "bar" ] || myhash[ "baz" ]

また、fooの値が存在する場合はmyhash ["bar"]に設定され、存在しない場合はfooがmyhash["baz"]に設定されます。どちらも存在しない場合は、fooがnilに設定されます。

Pythonでは、このタイプの割り当てを試みると構文エラーが発生します。さらに、Pythonはmyhash ["baz"]にKeyErrorを設定する代わりに、KeyErrorをスローします。Pythonで条件付きでfooを設定する唯一の方法は、大きな複数行の条件付きステートメントを作成することだと私には思えますが、Rubyのように1行でこれを実行したいと思っています。これを行う方法はありますか?

4

2 に答える 2

3

Pythonまたは演算子の構文が異なるため、構文エラーが発生します。次のメソッドNoneを使用して、辞書ルックアップから戻るようにPythonに明示的に要求する必要があります。.get()

foo = myhash.get('bar') or myhash.get('baz')

.get()検索されたキーの代わりにデフォルト値を返すため(デフォルトはになります) None、これを次のように綴ることもできます。

foo = myhash.get('bar', myhash.get('baz'))

myhash['bar']これには、 false-y(空のシーケンスや数値0などのブールコンテキストでFalseと評価される)の場合でも返さmyhash['bar']れ、ではないという追加の利点がありますmyhash['baz']

于 2012-10-06T16:24:35.150 に答える
0
foo = myhash.get('bar', myhash['baz'])

'baz'キーが存在しない場合、これはエラーを発生させますが、とにかくバグであると考えており、言語がそれを黙らせたくないと思います。2番目の項目もオプションであり、最終的なフォールバックとして必要な場合は、2番目のルックアップにNoneも使用できます。.get

于 2012-10-06T16:24:49.177 に答える