这个Python语法是什么意思?(c == c in s)

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
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语言参考手册以获取更详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接