当运行下面描述的代码片段时,我得到了一个有趣的 python 行为。
显然 python 解释器进行了某种优化并且不运行该函数,因为逻辑语句输出是已知的(False 和 True 仍然等于 false)。
def some_func(x):
print(x)
return False
flag = True
for x in range(5):
flag = flag and some_func(x)
输出:
0
预期输出:
0
1
2
3
4
显而易见的解决方案是:
flag = true
for x in range(5):
temp_flag = some_func(x)
flag = flag and temp_flag
但我想知道是否有某种方法可以控制解释器优化(或者这是和 IDE 配置)?
最佳答案
Python 使用 short-circuit evaluation这意味着在表达式中
flag and some_func()
如果 flag
为 False,some_func()
将永远不会被执行,因为 some_func()
的结果不会改变结果(无论 x 的值如何,False and x
始终为 False)。
编辑:如果您颠倒顺序:
flag = some_func() and flag
逻辑不会改变(and
是可交换的),但现在 some_func()
将始终执行。
编辑 2: 如果您有两个以上的参数,这个简单的技巧将不起作用。考虑这个例子:
>>> def f(name):
... print(name)
... return False
...
>>> f('A') and f('B') and f('C')
A
False
如您所见,执行将在 f('A')
处停止。
在这种情况下,您可以使用 all()
代替 和
来评估所有参数:
>>> all([f('A'), f('B'), f('C')])
A
B
C
False
关于python - 函数未执行(逻辑语句的一部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49967061/