python – 为什么我的生成器没有返回值?

python – 为什么我的生成器没有返回值?,第1张

概述我在 Python生成器中遇到了一些令人惊讶的行为: >>> def f(n):... if n < 2:... return [n]... for i in range(n):... yield i * 2... >>> list(f(0))[]>>> list(f(1))[]>>> list(f(2))[0, 2] 为什么前 我在 Python生成器中遇到了一些令人惊讶的行为:

>>> def f(n):...     if n < 2:...         return [n]...     for i in range(n):...         yIEld i * 2... >>> List(f(0))[]>>> List(f(1))[]>>> List(f(2))[0,2]

为什么前两种情况下发电机没有返回任何值?

解决方法 因为生成器返回语句不返回任何内容,所以它们结束执行(python知道这是一个生成器,因为它包含至少一个yIEld语句).而不是返回[n]做

yIEld n return

编辑

在用python核心开发者提出这个问题后,他们向我指出了它所说的python docs

@H_403_31@

In a generator function,the return statement indicates that the generator is done and will cause stopiteration to be raised. The returned value (if any) is used as an argument to construct stopiteration and becomes the stopiteration.value attribute.

所以你可以做到

def f(n):    if n < 2:         return [n]    for i in range(n):         yIEld i * 2g = f(1)res = []while True:    try:         res.append(next(g))    except stopiteration as e:         if e.value is not None:              res = e.value         break

如果你真的,真的很想要.

总结

以上是内存溢出为你收集整理的python – 为什么我的生成器没有返回值?全部内容,希望文章能够帮你解决python – 为什么我的生成器没有返回值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存