Python 从正常函数调用的生成器函数
我对python中的生成器表达式感到困惑 我在玩弄一个主意。。。假设我有一个生成函数,它正被一个带有正常返回语句的正常函数调用Python 从正常函数调用的生成器函数,python,python-3.x,Python,Python 3.x,我对python中的生成器表达式感到困惑 我在玩弄一个主意。。。假设我有一个生成函数,它正被一个带有正常返回语句的正常函数调用 def stream_something(): for x in range(10): yield x def return_something(): return stream_something() return_generator = return_something() print(next(return_generator)
def stream_something():
for x in range(10):
yield x
def return_something():
return stream_something()
return_generator = return_something()
print(next(return_generator))
print(next(return_generator))
print(next(return_generator))
print(next(return_generator))
print(next(return_generator))
我期待这样的结果,因为在方法return\u something中,我想我将得到stream\u something生成器函数的一个新实例
0 0 0 0
但我得到了这个值..看起来像
01 2 3 4
我只是有点困惑,也许有人能告诉我这一点吗?
那么这是否意味着即使我使用了return语句,它仍然会产生一些值呢?
next
获取序列的嵌套值,而您得到的是0到10的范围,因此当然,next
将返回下一个值,毫不奇怪,这就是为什么它被称为next
,如果您有以下代码:
def stream_something():
for x in range(10):
yield 0 # Notice!
def return_something():
return stream_something()
return_generator = return_something()
print(next(return_generator))
print(next(return_generator))
print(next(return_generator))
print(next(return_generator))
print(next(return_generator))
它将连续打印
0
产量
用于返回一个生成器,该生成器也是一个惰性迭代器。
带有类型提示的代码将是:
def stream_something()->迭代器[int]:
...
def return_something()->迭代器[int]:
...
return\u something
返回由stream\u something
返回的相同的Iterator
噢,是的……我真傻,我还在使用相同的生成器函数。我不应该在python函数中混用返回和收益。谢谢