gpt4 book ai didi

python - 在 Python 3 中使用生成器的类似方法

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:09 27 4
gpt4 key购买 nike

我想了解 yield/generators 在 python 中的使用。我想知道,如果给定一个数字列表(例如:[1, 2, 3, 4, 5, 6, 7, 8, 9]),以下两个语句是等效的。如果不是,有什么区别?

x = (n for n in numbers)
return x


for n in numbers:
yield n

最佳答案

据我所知,它们几乎等同于 PEP 289 中指定的:

g = (x**2 for x in range(10))
print g.next()

is equivalent to:

def __gen(exp):
for x in exp:
yield x**2
g = __gen(iter(range(10)))
print g.next()

然而,它只是几乎等价,在你的情况下的区别是何时 iter(numbers) 被评估:

>>> def f1(l):
... x = (n for n in l)
... return x
...
>>> def f2(l):
... for n in l:
... yield n
...

>>> a1 = f1(1)
TypeError: 'int' object is not iterable

>>> a2 = f2(2) # works
>>> next(a2) # fails only after calling "next"
TypeError: 'int' object is not iterable

f1 将立即尝试执行 iter(l)f2 将仅执行 iter(l)在其上调用 next 之后。

要真正等效,您需要将 iter(numbers) 传递给使用 yield 的函数。

关于python - 在 Python 3 中使用生成器的类似方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46174635/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com