10

Ruby はこれをサポートしています:

name = name || "default"

Pythonで試してみると:

name = name or "default"

通訳レポート:

NameError: name 'name' is not defined

Pythonでの短絡評価割り当てに相当するものは何ですか?

4

4 に答える 4

19

実際に定義した場合は、次のようにname機能します。

name = None
name = name or 'default'

短絡は、実際に変数を定義する必要はありません。通常、はどこかnameから取得されていますが、空の (偽の) 値です。

name = somefunction('name') or 'default'
于 2012-11-13T14:50:00.633 に答える
13
name = globals()['name'] if 'name' in globals() else 'default'

または、より簡潔に:

name = globals().get('name','default')

locals()内部関数を置換します。


おそらく、次のようにする方が良いでしょうtry/except

try:
   name
except NameError:
   name = 'default'

補足として、私は自分のコードでこれらのイディオムを決して使用しません。(もちろん、あなたが言及した Javascript や Ruby の他のイディオムは使用しません)。最初に変数がデフォルト値に宣言されていることを確認し、必要に応じてデフォルト以外の値に変更します。

于 2012-11-13T14:51:03.793 に答える
1

恐ろしい、恐ろしい考えですが...

name = globals().get("name", locals().get("name", "default"))

... あなたが望むことを行います (グローバル変数とローカル変数のどちらを持っているかについてあなたを暗闇の中に残します)。

于 2012-11-13T14:58:44.437 に答える