Python中带有“is”op的意外行为

2024-04-24 06:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

这段代码很容易解释。我在和Python混日子,这个(a是b==b==a是c)意外地返回True。在我看来,操作顺序是先==然后是'is'(根据google)。所以代码应该等价于(a is True is c),后者返回False。你知道吗

不管怎样,我尝试了很多可能的操作顺序,但似乎都返回错误。我错过了什么很明显的东西吗?你知道吗

我用的是3.4.2

a,b,c=['wtf' for i in range(3)]

print(a is b==b==a is c) #prints True
print(b==b==a) #prints True
print(a is True is c) #prints False
print((a is (b==b==a)) is c) #prints False
print(a is (b==b==a) is c) #prints False
print((a is b==b==a) is c) #prints False
print((a is b==b)==a is c) #prints False
print((a is b)==b==a is c) #prints False
print(a is ((b==b)==a) is c) #prints False
print(a is ((b==b)==a is c)) #prints False
print((a is b)==(b==(a is c))) #prints False
print((a is b)==b==(a is c)) #prints False

Tags: 代码infalsetruefor顺序is错误
1条回答
网友
1楼 · 发布于 2024-04-24 06:19:36

在Python比较运算符链中,soa is b==b==a is c等价于

(a is b) and (b == b) and (b == a) and (a is c)

由于a、b和c都是同一个对象,所有比较的结果都是True。你知道吗

相关问题 更多 >