Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从正常函数调用的生成器函数_Python_Python 3.x - Fatal编程技术网

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)

我对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))
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函数中混用返回和收益。谢谢