あなたはめったにPythonで未定義の変数を持っていないだろう、とあなたが行うときには、通常、あなたがメートルを持っていることを意味間違いを犯す。しかし、好都合なことに、デフォルト(空のコンテナ、長さゼロの文字列、ゼロ、およびNone
)として一般的に使用される値の種類のほとんどは、Pythonでは「偽」です。 Pythonでブール演算子の仕事:
name = name or "Guido" # if name is empty, set it to "Guido"
numb = numb or 42 # if numb is zero, set it to 42
この作品の理由は、最初の引数は短絡と呼ばれる「truthy」であり、いずれの場合も、実際の引数を返すのではなく、場合Pythonはor
の評価を停止していることですその結果、単にTrue
またはFalse
となります。したがってname
が "Jim"の場合、"Jim"
は長さがゼロでない文字列であり、 "真実"なので"Jim" or "Guido"
は"Jim"
と評価されます。
もちろん、あなたが扱っている値の型がわからない、あるいは「偽の」値が有効な値であることがわからないときは、うまく機能しません。辞書内のアイテムを扱う際にもう一つの一般的なイディオムが使用されている
name = raw_input("What is your name? ") or "Guido"
:しかし、それはコンフィギュレーションファイルおよび欠損値が空の文字列を返しますraw_input()
のようなもので、かなりうまく動作します。辞書クラスのget()
メソッドでは、変数が辞書にない場合に使用されるデフォルト値を指定できます。
name = values.get("name", "Guido")
**kwargs
規約を使用して関数にキーワード引数が渡されたときに使用できます。
name = locals().get("name", "Guido")
しかし、私が言ったように、あなたはめったにありませんでしょう、:globals()
とlocals()
機能が辞書としてスコープ現在、それぞれ、すべてのグローバルまたはローカル変数を返すようあなたはも、変数でそれを使用することができますPythonでは実際には未定義の変数です。 Webフレームワークのような場合は、クエリ文字列の引数を辞書に渡して、辞書の.get()
メソッドを使用できます。
名前が実際には存在しない(たとえば、設定ファイルがPython構文であり、それを解析するのではなくPythonモジュールとしてインポートし、ユーザーが省略できるようにする
import config
name = getattr(config, "name", "Guido") # rather than just name.config
それとも、それはNameError
を投げると、それをキャッチしてみましょう:いくつかの値...または均等奇抜な何か)あなたは、デフォルト値を受け入れている(辞書の.get()
など)、getattr()
を使用することができます。
はい、重複しているようです。ありがとうございました! –
'$ foo || =" what "'既に$ falseの場合は '$ foo'を再割り当てします。もちろん、 'undef'はfalseですが、そうでなければゼロとヌル文字列です。 '$ foo // =" what "' – Borodin
のように、未定義の値だけを再割り当てするには、スラッシュを使用してください。perl 5.10では '//'とその拡張子 '// ='が追加されています。まだ5.8.xに固執しているなら、 '// ='を使うことはできません(できるだけアップグレードを真剣に考えてください)。 –