返回一个生成器作为返回值,生成器变空

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

我对以下片段感到困惑:

def iter_test(x):
    l = [1,2,3,4,5]
    default = (i for i in l)
    if x:
        return default
    else:
        for i in default:
            yield i

def test_iter():
    a = iter_test(True)
    b = iter_test(False)
    print(a, b)
    print('a', list(a))
    print('b', list(b))

test_iter()

输出为:

<generator object iter_test at 0x00000171F1A82B50> <generator object iter_test at 0x00000171F1A82DC0>
a []
b [1, 2, 3, 4, 5]

此片段测试返回迭代器的两种不同方法 在一个函数中。

  1. 在第一个方法中,迭代器本身,
    default
    已返回。
  2. 在第二种方法中,首先用
    for
    对迭代器进行解包, 然后它的内容就被一一
    yield
    了。

通过

print(a, b)
我们可以看到这两种方法 返回一个生成器对象。然而,发电机 第一个方法返回的是空的。

由于

a
的类型是
generator
,所以迭代器应该是 返回成功。怎么变成空的 代替发电机?

我的Python版本是Python 3.12.2。

python python-3.x iterator
1个回答
0
投票

只要主体中包含

yield
语句,就会定义生成器函数。

def foo():
    return 1

def bar():
    return 1
    yield None

print(foo()) # 1
print(bar()) # <empty generator>
© www.soinside.com 2019 - 2024. All rights reserved.