当前位置:  开发笔记 > 编程语言 > 正文

Python列表理解在guard和result中具有相同的功能

如何解决《Python列表理解在guard和result中具有相同的功能》经验,为你挑选了0个好方法。

我想知道是否有人有一个很好的干净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 ]

那么,任何人都能想出更好的东西吗?

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有