python布尔表达式不是“短路”?
例如:
def foo():
print 'foo'
return 1
if any([f() for f in [foo]*3]):
print 'bar'
我认为上面的代码应该输出:
foo
bar
而不是:
foo
foo
foo
bar
为什么?如何制作“短路”效果?
For example:
def foo():
print 'foo'
return 1
if any([f() for f in [foo]*3]):
print 'bar'
I thought the above code should output:
foo
bar
instead of :
foo
foo
foo
bar
Why ? how can I make the "short-circuit" effect ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它在将列表传递给任何
尝试
之前创建列表,这样仅创建生成器表达式,因此仅评估所需数量的术语。
It's creating the list before passing it to any
try
this way only a generator expression is created, so only as many terms as necessary are evaluated.
解构你的程序看看发生了什么:
你已经创建了一个列表并传递给任何一个并且已经打印了 3 次。
这被馈送到 if 语句:
解决方案:将生成器传递给任何
Deconstruct your program to see what is happening:
You are already creating a list and passing to any and have printed it 3 times.
This is fed to if statement:
Solution: Pass a generator to any