C#にはヌル合体演算子( と表記??
)を使用すると、代入時に簡単に(短時間で)null チェックを行うことができます。
string s = null;
var other = s ?? "some default value";
Python に相当するものはありますか?
私は次のことができると知っています:
s = None
other = s if s else "some default value"
しかし、さらに短い方法(繰り返す必要がない方法s
)はありますか?
ベストアンサー1
other = s or "some default value"
さて、演算子がどのように機能するかを明確にする必要がありますor
。これはブール演算子なので、ブールコンテキストで機能します。値がブール値でない場合は、演算子の目的のためにブール値に変換されます。
演算子はoror
のみを返すのではないことに注意してください。代わりに、最初のオペランドが true と評価された場合は最初のオペランドを返し、最初のオペランドが false と評価された場合は 2 番目のオペランドを返します。True
False
この場合、式は、ブール値に変換されたときに true と評価される場合は をx or y
返します。それ以外の場合は を返します。ほとんどの場合、これは C♯ の null 合体演算子とまったく同じ目的で機能しますが、次の点に注意してください。x
True
y
42 or "something" # returns 42
0 or "something" # returns "something"
None or "something" # returns "something"
False or "something" # returns "something"
"" or "something" # returns "something"
変数を使用してs
、クラスのインスタンスへの参照または(クラスがメンバーとをNone
定義していない限り) のいずれかを保持する場合は、null 結合演算子と同じセマンティクスを使用するのが安全です。__nonzero__()
__len__()
実際、Python のこの副作用があると便利な場合もあります。どの値が false と評価されるかがわかっているので、これを使用して、None
特に (たとえばエラー オブジェクト) を使用せずにデフォルト値をトリガーできます。
いくつかの言語では、この行動はエルヴィスオペレーター。