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),除了中间表达式只计算一次。

该语句c == c in s同样等价于(c == c) and (c in s),其计算结果为True

为了突出前面的一点,中间的表达式只计算一次:

>>> 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 回答