条件“产量”的令人惊讶的结果[重复]

问题描述 投票:0回答:1

我有以下使用

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]
)。为什么情况并非如此,我应该如何更改代码才能使其正常工作?

python yield
1个回答
1
投票

使用

yield from
似乎可以修复你的功能:

import itertools

def foo(arg):
    if arg:
        yield -1
    else:
        yield from range(5)


print(list(foo(True)))
print(list(foo(False)))

按要求输出

© www.soinside.com 2019 - 2024. All rights reserved.