某些条件的评估与 Python 中的预期不同
Certain conditions evaluate differently then expected in Python
目前正在创建一个片段,它采用数组中的给定值并添加 32
我的 IDE (PyCharm) 建议我通过执行以下操作删除代码中的冗余
if ascii_key[i] >= 65 and ascii_key[i] <= 90:
ascii_key[i] = ascii_key[i] + 32
到
if 65 <= ascii_key[i] <= 90:
ascii_key[i] = ascii_key[i] + 32
这两种解决方案都适用于我,但我很好奇为什么这种条件安排会中断
if ascii_key[i] <= 65 >= 90:
ascii_key[i] = ascii_key[i] + 32
如果方便的话,希望用伪代码解释一下,我还是个新手
在您提供的第三个代码中。
ascii_key[i] <= 65 >= 90
这总是评估为 False
.
ascii_key[i] <= 65 >= 90
计算为 ascii_key[i] <= 65 and 65 >= 90
。 65>=90
是 False
.
a<b<c
的字节码求值。
In [17]: 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
a<b and b<c
的字节码求值。
In [18]: dis.dis('a<b and b<c')
1 0 LOAD_NAME 0 (a)
2 LOAD_NAME 1 (b)
4 COMPARE_OP 0 (<)
6 JUMP_IF_FALSE_OR_POP 14
8 LOAD_NAME 1 (b)
10 LOAD_NAME 2 (c)
12 COMPARE_OP 0 (<)
>> 14 RETURN_VALUE
你可以观察观察 a<b<c
等价于 a<b and b<c
.
这是由于条件是如何解决的。
if ascii_key[i] >= 65 and ascii_key[i] <= 90
和 if 65 <= ascii_key[i] <= 90
是等价的。
虽然 if ascii_key[i] <= 65 >= 90
解决了这个问题:if ascii_key[i] <= 65 and 65 >= 90
65 >= 90 永远不会是真的。
首先对条件 65 <= ascii_key[i]
和另一个条件 ascii_key[i] <= 90
求值并用 AND 链接。
干杯
目前正在创建一个片段,它采用数组中的给定值并添加 32
我的 IDE (PyCharm) 建议我通过执行以下操作删除代码中的冗余
if ascii_key[i] >= 65 and ascii_key[i] <= 90:
ascii_key[i] = ascii_key[i] + 32
到
if 65 <= ascii_key[i] <= 90:
ascii_key[i] = ascii_key[i] + 32
这两种解决方案都适用于我,但我很好奇为什么这种条件安排会中断
if ascii_key[i] <= 65 >= 90:
ascii_key[i] = ascii_key[i] + 32
如果方便的话,希望用伪代码解释一下,我还是个新手
在您提供的第三个代码中。
ascii_key[i] <= 65 >= 90
这总是评估为 False
.
ascii_key[i] <= 65 >= 90
计算为 ascii_key[i] <= 65 and 65 >= 90
。 65>=90
是 False
.
a<b<c
的字节码求值。
In [17]: 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
a<b and b<c
的字节码求值。
In [18]: dis.dis('a<b and b<c')
1 0 LOAD_NAME 0 (a)
2 LOAD_NAME 1 (b)
4 COMPARE_OP 0 (<)
6 JUMP_IF_FALSE_OR_POP 14
8 LOAD_NAME 1 (b)
10 LOAD_NAME 2 (c)
12 COMPARE_OP 0 (<)
>> 14 RETURN_VALUE
你可以观察观察 a<b<c
等价于 a<b and b<c
.
这是由于条件是如何解决的。
if ascii_key[i] >= 65 and ascii_key[i] <= 90
和 if 65 <= ascii_key[i] <= 90
是等价的。
虽然 if ascii_key[i] <= 65 >= 90
解决了这个问题:if ascii_key[i] <= 65 and 65 >= 90
65 >= 90 永远不会是真的。
首先对条件 65 <= ascii_key[i]
和另一个条件 ascii_key[i] <= 90
求值并用 AND 链接。
干杯