Python “的结果”;a是a是“a”;比较
结果:Python “的结果”;a是a是“a”;比较,python,Python,结果: A = 314 if A == A == A: print('True #1') if A == A == 271: print('True #2') lie = 0 if lie is lie is lie: print('no matter how white, how small,') print('how incorporating of a smidgeon') print('of truth there be in it.')
A = 314
if A == A == A:
print('True #1')
if A == A == 271:
print('True #2')
lie = 0
if lie is lie is lie:
print('no matter how white, how small,')
print('how incorporating of a smidgeon')
print('of truth there be in it.')
我知道在if语句中使用两个“=”s和“is”s是不正常的。但是我想知道Python解释器是如何设置if
语句的
表达式是同时解释的还是短路解释的?它将被解释为:
True #1
no matter how white, how small,
how incorporating of a smidgeon
of truth there be in it.
你所遇到的被称为操作员链接 从以下文件:
比较可以任意链接,例如<强> <代码> x
comparison ::= or_expr ( comp_operator or_expr )*
comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="
| "is" ["not"] | ["not"] "in"
这表明所有的谎言
都被检查,看它们是否匹配,以线性方式。如果一个失败了,它应该断开/返回
要确认,请考虑:
def f():
lie = 0
if lie is lie is lie:
print('Lie')
dis.dis(f)
2 0 LOAD_CONST 1 (0)
2 STORE_FAST 0 (lie)
3 4 LOAD_FAST 0 (lie)
6 LOAD_FAST 0 (lie)
8 DUP_TOP
10 ROT_THREE
12 COMPARE_OP 8 (is)
14 JUMP_IF_FALSE_OR_POP 22
16 LOAD_FAST 0 (lie)
18 COMPARE_OP 8 (is)
20 JUMP_FORWARD 4 (to 26)
>> 22 ROT_TWO
24 POP_TOP
>> 26 POP_JUMP_IF_FALSE 36
4 28 LOAD_GLOBAL 0 (print)
30 LOAD_CONST 2 ('Lie')
32 CALL_FUNCTION 1
34 POP_TOP
>> 36 LOAD_CONST 0 (None)
38 RETURN_VALUE
“同时”是什么意思?我猜它被解释为只使用不同的运算符(和操作数)。有趣的问题,但几乎可以肯定是一个重复,运算符链接以前一定被问过。三重非“同时”,我的意思是“谎言是谎言”返回“真”,然后“真是谎言”,这可能会失败。根据回复,我理解它被解释为“谎言就是谎言,谎言就是谎言”。我以前没有试过阅读字节码。了解它是如何工作的是很有用的。。。。除非第三个
lie
将不会进行第二次评估。或者可能lie0=lie1=lie2=0;如果lie0是lie1,而lie1是lie2
,则稍微澄清哪个是哪个。
def f():
lie = 0
if lie is lie is lie:
print('Lie')
dis.dis(f)
2 0 LOAD_CONST 1 (0)
2 STORE_FAST 0 (lie)
3 4 LOAD_FAST 0 (lie)
6 LOAD_FAST 0 (lie)
8 DUP_TOP
10 ROT_THREE
12 COMPARE_OP 8 (is)
14 JUMP_IF_FALSE_OR_POP 22
16 LOAD_FAST 0 (lie)
18 COMPARE_OP 8 (is)
20 JUMP_FORWARD 4 (to 26)
>> 22 ROT_TWO
24 POP_TOP
>> 26 POP_JUMP_IF_FALSE 36
4 28 LOAD_GLOBAL 0 (print)
30 LOAD_CONST 2 ('Lie')
32 CALL_FUNCTION 1
34 POP_TOP
>> 36 LOAD_CONST 0 (None)
38 RETURN_VALUE
>lie is lie is lie is lie is lie
True
>lie is not lie is lie is lie is lie is lie
False
>lie is lie is lie is lie is lie is not lie
False