1. ホーム
  2. python

[解決済み] C#のnull-coalescing演算子に相当するPythonの演算子はありますか?

2022-03-22 11:08:26

質問

C#では null coalescing演算子 (と書かれています。 ?? ) を使用すると、代入時に簡単に (短時間で) NULL チェックを行うことができます。

string s = null;
var other = s ?? "some default value";

Pythonに相当するものはありますか?

できることは知っています。

s = None
other = s if s else "some default value"

しかし、もっと短い方法はないだろうか? s )?

解決方法は?

other = s or "some default value"

OK、どのように or 演算子が動作します。これはブーリアン演算子なので、ブーリアン文脈で動作します。値がブーリアンでない場合、演算子の目的のためにブーリアンに変換されます。

なお or 演算子は True または False . その代わり、最初のオペランドが真と評価された場合は最初のオペランドを、最初のオペランドが偽と評価された場合は2番目のオペランドを返します。

この場合、式 x or y は以下を返します。 x であれば True またはbooleanに変換されたときにtrueと評価される。そうでない場合は y . ほとんどの場合、これはC♯のヌルコース演算子と全く同じ目的で使用されますが、覚えておいてください。

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 (クラスがメンバを定義していない限り) __nonzero__()__len__() ) の場合、null-coalescing演算子と同じセマンティクスを使用するのが安全である。

実際、Pythonのこの副次的効果は便利なものでさえあるかもしれません。どのような値が false と評価されるかがわかっているので、これを使えば None を具体的に示しています(例えば、エラーオブジェクト)。

いくつかの言語では、この動作は エルビス演算子 .