我想学习如何使用生成器的返回值(但这不是我现在关心的)。
经过查找,他们说我可以获取StopIteration生成器耗尽时的返回值,所以我用以下代码进行了测试:
def my_generator():
yield 1
yield 2
yield 3
return "done"
def exhaust_generator(_gen):
print("===============================================\n")
print("exhaust_generator")
try:
while True:
print(next(_gen))
except StopIteration as e:
print(f"Return value: '{e.value}'")
def exhaust_generator_iter(_gen):
print("===============================================\n")
print("exhaust_generator_iter")
try:
for i in _gen:
print(i)
print(next(_gen))
except StopIteration as e:
print(f"Return value: {e.value}")
gen = my_generator()
gen2 = my_generator()
exhaust_generator(gen)
exhaust_generator_iter(gen2)
Run Code Online (Sandbox Code Playgroud)
===============================================
exhaust_generator
1
2
3
Return value: 'done'
===============================================
exhaust_generator_iter
1
2
3
Return value: None
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,耗尽生成器的两个版本的返回值不同,我想知道为什么。
搜索了谷歌,但没有帮助。