我对以下片段感到困惑:
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]
此片段测试返回迭代器的两种不同方法 在一个函数中。
default
已返回。for
对迭代器进行解包,
然后它的内容就被一一yield
了。通过
print(a, b)
我们可以看到这两种方法
返回一个生成器对象。然而,发电机
第一个方法返回的是空的。
由于
a
的类型是 generator
,所以迭代器应该是
返回成功。怎么变成空的
代替发电机?
我的Python版本是Python 3.12.2。
只要主体中包含
yield
语句,就会定义生成器函数。
def foo():
return 1
def bar():
return 1
yield None
print(foo()) # 1
print(bar()) # <empty generator>