【发布时间】:2011-05-17 03:50:05
【问题描述】:
例如:
def foo():
print 'foo'
return 1
if any([f() for f in [foo]*3]):
print 'bar'
我认为上面的代码应该输出:
foo
bar
而不是:
foo
foo
foo
bar
为什么?怎样才能产生“短路”效果?
【问题讨论】:
-
简短回答:
[f() for f in [foo]*3]列表推导执行并创建f()返回值列表之前any()有机会评估它们(和短路)。