Ruby はこれをサポートしています:
name = name || "default"
Pythonで試してみると:
name = name or "default"
通訳レポート:
NameError: name 'name' is not defined
Pythonでの短絡評価割り当てに相当するものは何ですか?
Ruby はこれをサポートしています:
name = name || "default"
Pythonで試してみると:
name = name or "default"
通訳レポート:
NameError: name 'name' is not defined
Pythonでの短絡評価割り当てに相当するものは何ですか?
実際に定義した場合は、次のようにname
機能します。
name = None
name = name or 'default'
短絡は、実際に変数を定義する必要はありません。通常、はどこかname
から取得されていますが、空の (偽の) 値です。
name = somefunction('name') or 'default'
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 の他のイディオムは使用しません)。最初に変数がデフォルト値に宣言されていることを確認し、必要に応じてデフォルト以外の値に変更します。
恐ろしい、恐ろしい考えですが...
name = globals().get("name", locals().get("name", "default"))
... あなたが望むことを行います (グローバル変数とローカル変数のどちらを持っているかについてあなたを暗闇の中に残します)。