2

次の行を理解するのに問題があります。

result = (status!=None and "off" or "on")

これが呼び出されると、status値(正規表現検索の結果)のみが割り当てられます。ただし、このコマンドの後、result「on」または「off」の値を取ります。

私の訓練されていない目には、これは単なる比較のように見えます。この割り当てはどのように行われていますか?

4

1 に答える 1

7

ドキュメントから:

x and yは最初に評価しxます; falseの場合x、その値が返されます。それ以外の場合yは評価され、結果の値が返されます。

x or yは最初に評価しxます; trueの場合x、その値が返されます。それ以外の場合yは評価され、結果の値が返されます。

さらに、空でない文字列は、ブールコンテキストで表示される場合、「真」であると見なされます。

これで、私たちはあなたの質問に取り組むことができます。

演算子の優先順位規則により、次のようになります。

status != None and "off" or "on"

と同等です:

(status != None and "off") or "on"

最初の部分は、次のようにstatus != None and "off"評価されます。

  • Falsestatusの場合None;
  • "off"そうでなければ

式全体は、次のように(status != None and "off") or "on"評価されます。

  • "on"statusの場合None;
  • "off"そうでなければ。

このステートメントを書くための間違いなくよりPythonicな方法は次のとおりです。

result = "on" if status is None else "off"
于 2013-01-30T13:57:45.653 に答える