C# の null 結合演算子に相当する Python はありますか? 質問する

C# の null 結合演算子に相当する Python はありますか? 質問する

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 番目のオペランドを返します。TrueFalse

この場合、式は、ブール値に変換されたときに true と評価される場合は をx or y返します。それ以外の場合は を返します。ほとんどの場合、これは C♯ の null 合体演算子とまったく同じ目的で機能しますが、次の点に注意してください。xTruey

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特に (たとえばエラー オブジェクト) を使用せずにデフォルト値をトリガーできます。

いくつかの言語では、この行動はエルヴィスオペレーター

おすすめ記事