我想知道是否有人有一个很好的干净Pythonic和有效的技术来实现在结果中涉及保护中相同表达的理解.
需要说明的是,请考虑以下简单示例:
def f(a):
print "Calling",a
return a + 1
print [ f(v) for v in xrange(3) if f(v) > 1 ]
这将打印
Calling 0
Calling 1
Calling 1
Calling 2
Calling 2
[2,3]
证明f对于大多数元素被调用两次.这很好,如果f有副作用,我们想要什么,但如果f是一些没有副作用的昂贵操作,重复调用是不可取的.但是对于每个元素只调用f一次的解决方案对我来说似乎笨拙/冗长:
intermediate = ( f(v) for v in xrange(3) )
print [ r for r in intermediate if r > 1 ]
即使它被收缩成一条线
print [ r for r in ( f(v) for v in xrange(3) ) if r > 1 ]
那么,任何人都能想出更好的东西吗?
最佳答案
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。