根據在https://docs.python.org/2/reference/simple_stmts.html#yield的文檔,Python生成器函數如何保持本地狀態?
所有局部狀態被保持,包括局部變量的當前綁定,指令指針,並且內部評價堆棧:足夠的信息被保存,以使下一次的next()被調用時,該函數可以像yield語句只是另一個外部調用一樣進行。
這裏有一個簡單的例子:
def generator():
my_list = range(10)
print "my_list got assigned"
for i in my_list:
print i
yield
return
在shell下,發電機()的行爲是這樣的:
>>>>generator().next()
my_list got assigned
0
>>>>generator().next()
my_list got assigned
0
我本來以爲my_list不會得到重新分配,每次的.next()叫做。有人可以解釋爲什麼會發生這種情況,爲什麼看起來文檔與此相矛盾?
您每次創建一個新的生成器對象。在同一個對象上調用'next'兩次,你會得到你期望的輸出。 – dano
幾乎重複:[Python中的生成器和for循環](http://stackoverflow.com/q/29570348/846892) –