10

誰かが私にPython構文のこの奇妙な例を見せてくれました。[4]が機能しているのはなぜですか?

[5]または[6]のいずれかに評価されると予想していましたが、どちらも機能しません。ここで行われるべきではない時期尚早の最適化はありますか?

In [1]: s = 'abcd'

In [2]: c = 'b'

In [3]: c in s
 Out[3]: True

In [4]: c == c in s
Out[4]: True

In [5]: True in s
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-e00149345694> in <module>()
----> 1 True in s

TypeError: 'in <string>' requires string as left operand, not bool

In [6]: c == True
Out[6]: False
4

1 に答える 1

13

<これは、Python が複数の演算子 ( など) を一緒にチェーンできるようにするのと同じシンタックス シュガーです。

例えば:

>>> 0 < 1 < 2
True

(0<1) and (1<2)これは、中央の式が 1 回だけ評価されることを除いて、 と同等です。

このステートメントc == c in sは、同様に と同等で(c == c) and (c in s)あり、これは に評価されTrueます。

前の点を強調するために、中間の式は 1 回だけ評価されます。

>>> def foo(x):
...     print "Called foo(%d)" % x
...     return x
...
>>> print 0 < foo(1) < 2
Called foo(1)
True

詳細については、Python 言語リファレンスを参照してください。

于 2013-03-14T04:24:30.617 に答える