>>> 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 – 为什么我的生成器没有返回值?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)