繁体   English   中英

函数未执行(逻辑语句的一部分)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM