在测试的时候,发现了一段挺有意思的 code block.
def g2(iter):
yield from iter
def g1(iter):
yield iter
def out(ar):
for i in ar:
print(i)
dit= {
"a": 1,
"b": 2,
"c": 3,
"d": 4,
"e": 5,
}
out(g1(dit))
out(g2(dit))
out(g2(g1(dit)))
print(next(g2(g1(dit))))
# 输出如下:
# {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
# a
# b
# c
# d
# e
# {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
# {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
在这段代码片段中,有意思的是 g2(g1()) 中:
g1 返回一个 generator 对象;
g2 迭代 g1 的 generator 对象,最后返回原来的值,可以使用 next() 获取 generator 对象的下一个值。