在Python 2.6中查看Queue.py,我发现这个构造我发现有点奇怪:
def full(self):
"""Return True if the queue is full, False otherwise
(not reliable!)."""
self.mutex.acquire()
n = 0 < self.maxsize == self._qsize()
self.mutex.release()
return n
Run Code Online (Sandbox Code Playgroud)
如果maxsize
为0,则队列永远不会满.
我的问题是它如何适用于这种情况?如何0 < 0 == 0
被认为是假的?
>>> 0 < 0 == 0
False
>>> (0) < (0 == 0)
True
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Run Code Online (Sandbox Code Playgroud) 我的一位大四学生证明了这一点,我想知道这是一个缺陷,还是有一些优先级和操作员关联性的东西证明了这一点.
>>> False==False in [False]
True
Run Code Online (Sandbox Code Playgroud) 请考虑以下声明:
> False == False in [False]
True
Run Code Online (Sandbox Code Playgroud)
然而:
> (False == False) in [False]
False
> False == (False in [False])
False
Run Code Online (Sandbox Code Playgroud)
不可思议.是什么原因和解释?
抱歉,我想不出更具描述性的标题。这不是非常重要,而是我发现的python 3.8(至少)中的一个奇怪的怪癖,我想我不可能是唯一注意到这一点的人,并且可能有一个合理的解释:
>>> 'foo' in 'foobar' == True
False
Run Code Online (Sandbox Code Playgroud)
它也以另一种方式工作:
>>> True == 'foo' in 'foobar'
False
Run Code Online (Sandbox Code Playgroud)
但是,从逻辑上讲,我认为这应该是 True,因为
>>> 'foo' in 'foobar'
True
>>> True == True
True
Run Code Online (Sandbox Code Playgroud)
我假设这是某种操作顺序错误,但是当我尝试对其进行分组时,我得到
>>> ('foo' in 'foobar') == True
True
>>> 'foo' in ('foobar' == True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable
Run Code Online (Sandbox Code Playgroud)
在这一点上,我主要只是很好奇,如果有人能解释这一点,那就太好了!
在这里有点精神,试图找出它在python中的作用:
print "word" in [] == False
Run Code Online (Sandbox Code Playgroud)
为什么打印False
?
考虑这个清单:
list = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
我想检查此列表中是否不存在数字9.有两种方法可以做到这一点.
方法1:此方法有效!
if not 9 in list: print "9 is not present in list"
Run Code Online (Sandbox Code Playgroud)
方法2:此方法不起作用.
if 9 in list == False: print "9 is not present in list"
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么方法2不起作用?
Can someone explain to me why the Python interpreter evaluates this expression to be False?
1 in [1] == True
Run Code Online (Sandbox Code Playgroud)
I would expect that 1 in [1] would evaluate to True, and obviously True == True would be True. However this isn't what happens - the expression is False. Why does this happen?
>>> "f" in "foo"
True
>>> "f" in "foo" == True
False
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么第二个表达式是 False。我看到==
优先级高于in
. 但随后我希望得到一个异常,这就是当我添加括号时会发生的情况:
>>> "f" in ("foo" == True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable
Run Code Online (Sandbox Code Playgroud)
foo
似乎只有当位于 两侧时,表达式才为 True ==
,如下所示:
>>> "f" in "foo" == "foo"
True
>>> "f" in "foo" == "bar"
False
Run Code Online (Sandbox Code Playgroud)
我缺少什么?Python 在这里实际计算什么?
今天我在这个Python程序中遇到了一个困难的情况:
a = [False, True]
x = True in a in a
y = True in a in [a]
z = True in a in (a)
print(x, y, z)
Run Code Online (Sandbox Code Playgroud)
这段代码的输出是
a = [False, True]
x = True in a in a
y = True in a in [a]
z = True in a in (a)
print(x, y, z)
Run Code Online (Sandbox Code Playgroud)
这怎么可能?
让我们在x
这里测试:
x = True in a in a
Run Code Online (Sandbox Code Playgroud)
True in [False, True]
是True
,又True in [False, True] …