[英]Function not executing (Part of a logical statement)
运行下面描述的代码片段时,我得到了一个有趣的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使用短路评估,这意味着在表达式中
flag and some_func()
如果flag
为False,将永远不会执行some_func()
,因为some_func()
的结果不会更改结果( False and x
始终为False,与x的值无关)。
编辑 :如果您颠倒顺序:
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()
代替and
对所有参数求值:
>>> all([f('A'), f('B'), f('C')])
A
B
C
False
您可以在没有显式循环的情况下执行相同的操作:
results = [some_func(x) for x in range(5)] # Collect a list of results.
flag = all(results) # True if every value in `results` is True.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.