为什么next(some_generator_func())会产生与next(a_var)不同的结果,其中a_var = some_generator_fun()?

时间:2015-06-30 19:41:00

标签: python

让some_generator_func()成为函数:

def some_generator_fun():
    yield 1
    yield 2

为什么会这样?

>>>>next(some_generator_func())
1
>>>>next(some_generator_func())
1

,而

>>>>a_var = some_generator_func()
>>>>next(a_var)
1
>>>>next(a_var)
2

2 个答案:

答案 0 :(得分:0)

在第一种情况下,每次调用函数时都会创建一个 new 生成器表达式。这意味着您将创建一个全新的生成器,然后调用next,这将有效地每次调用第一个元素。

当您将其分配给变量时,每次调用next时都会从该生成器中产生元素。

答案 1 :(得分:0)

调用some_generator_func从函数顶部开始创建一个新的迭代器。因此,在第一种情况下,您迭代两个新的迭代器;在后一种情况下,您迭代相同的迭代器两次。