加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

执行生成器表达式的最pythonic方法是什么?

发布时间:2020-12-20 13:02:05 所属栏目:Python 来源:网络整理
导读:越来越多的 Python特性变成了“懒惰的可执行文件”,就像生成器一样 表达式和其他类型的迭代器. 然而,有时候,我发现自己想要推出一个“for”循环,只是为了执行一些动作. 让循环实际执行的最pythonic是什么? 例如: a = open("numbers.txt","w")(a.write ("%d
越来越多的 Python特性变成了“懒惰的可执行文件”,就像生成器一样
表达式和其他类型的迭代器.
然而,有时候,我发现自己想要推出一个“for”循环,只是为了执行一些动作.

让循环实际执行的最pythonic是什么?

例如:

a = open("numbers.txt","w")
(a.write ("%d " % i) for i in xrange(100))
a.close()

不是代码,但你明白我的意思.如果我使用列表生成器,相反,我有副作用创建一个填充“无”的N长度列表.

目前我所做的是在调用“any”或“all”时使用表达式作为参数.但是我想找到一种不依赖于循环中执行的表达式结果的方法 – “any”和“all”都可以根据所评估的表达式停止.

要清楚,这些是我已经知道的方法,每个都有它的缺点:

[a.write ("%d " % i) for i in xrange(100))]

any((a.write ("%d " % i) for i in xrange(100)))

for item in (a.write ("%d " % i) for i in xrange(100)): pass

解决方法

有许多累加器具有消耗它们给出的整个迭代的效果,例如最小值或最大值 – 但即使它们也不完全忽略过程中产生的结果(例如,最小值和最大值将会提高例外,如果某些结果是复数).我不认为有一个内置的累加器可以完全按照你想要的 – 你必须编写(并添加到你的微型实用功能的个人藏匿处)一个微小的实用功能,如

def consume(iterable):
    for item in iterable: pass

我猜,主要原因是Python有一个for语句,你应该在它像手套一样使用它时(例如,对于你想要消费的情况;-).

顺便说一句,a.write返回None,这是假的,所以任何实际上都会消耗它(并且a.writelines会做得更好!).但我意识到你只是把它作为一个例子;-).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读