背景
众所周知,我们最好不要指定多个变量使用chain assignmentlike a = b = [1,2,3],因为这a将是b. 这是不安全的,因为a我们修改时会改变b。
但是,如果初始化是不可变的,我们可以这样做a = b = 1并且它是安全的。
最近,我发现在控制流的条件表达式中使用多个运算符很奇怪,比如if 1 < b < 2:orwhile a == b == c == 1:
例如,以下控制流在不同条件下执行不同的块:
a = 1
b = 1
c = 2
if a == b == c == 1:
print('All equal!')
else:
print('At least one variable is not equal to others')
至少一个变量不等于其他变量
我的问题
在控制流中的布尔表达式中,这种多重操作使用安全吗?我知道我们在编写布尔表达式时应该检查运算符的优先级。还有什么我们需要注意的吗?我尝试了一段时间,我认为多个运算符的使用是安全的。
字节码分析
我输入以下程序的字节码:
a = 1;b =2;c =1.5
a<b<c
import dis
dis.dis('a<b<c')
1 0 LOAD_NAME 0 (a)
2 LOAD_NAME 1 (b)
4 DUP_TOP
6 ROT_THREE
8 COMPARE_OP 0 (<)
10 JUMP_IF_FALSE_OR_POP 18
12 LOAD_NAME 2 (c)
14 COMPARE_OP 0 (<)
16 RETURN_VALUE
> 18 ROT_TWO
20 POP_TOP
22 RETURN_VALUE```
我只能认识到它在第 10 步比较和,然后a在第 14 步比较和。但为什么它仍然返回。我不熟悉分析字节码。如果有人可以帮助分析它,我将不胜感激!这是Module的官方指南:disbacFalse
海绵宝宝撒
墨色风雨
相关分类