我有以下使用
yield
的 Python 代码:
def foo(arg):
if arg:
yield -1
else:
return range(5)
具体来说,如果参数为
True,则
foo()
方法应迭代单个值 (-1
),否则迭代 range()
。但事实并非如此:
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(foo(True))
[-1]
>>> list(foo(False))
[]
对于最后一行,我希望得到与第一行相同的结果(
[0, 1, 2, 3, 4]
)。为什么情况并非如此,我应该如何更改代码才能使其正常工作?
使用
yield from
似乎可以修复你的功能:
import itertools
def foo(arg):
if arg:
yield -1
else:
yield from range(5)
print(list(foo(True)))
print(list(foo(False)))
按要求输出