您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:22:06 python 字数 2049 阅读 552 来源 www.jb51.cc/python

我想知道是否有人有一个很好的干净Pythonic和有效的技术来实现在结果中涉及保护中相同表达的理解.需要说明的是,请考虑以下简单示例:def f(a): print 'Calling', a return a + 1 print [ f(v) for v in xrange(3) if f(v) > 1 ] 这将打印Calling 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 ]

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

filter(lambda x: x > 1,[ f(v) for v in xrange(3)])

但这与您上次建议的解决方案一样冗长.

总结

以上是编程之家为你收集整理的Python列表理解在guard和result中具有相同的功能全部内容,希望文章能够帮你解决Python列表理解在guard和result中具有相同的功能所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶