【发布时间】:2014-08-14 16:41:43
【问题描述】:
我将函数f定义为
def f(flag):
n = 10
if flag:
for i in range(n):
yield i
else:
return range(n)
但是无论flag 是什么,f 都会返回一个生成器:
>>> f(True)
<generator object f at 0x0000000003C5EEA0>
>>> f(False)
<generator object f at 0x0000000007AC4828>
如果我遍历返回的对象:
# prints normally
for i in f(True):
print(i)
# doesn't print
for i in f(False):
print(i)
看起来f(False) 返回了一个已经被迭代的生成器。什么原因?谢谢。
【问题讨论】:
-
如果一个函数中有一个
yield,即使无法访问,它也总是一个生成器。
标签: python iteration generator yield