Python中的函数在返回后如何记住它的值?
这个问题在这里已经有了答案:
一个简单的答案。
如果你有一个函数可以产生一系列值,你可以使用yield来将它转换成一个generator
。
def func():
for i in range(3):
yield i
list(func()) ==> [0,1,2]
for el in func():
print(el) # 0
# 1
# 2
每次调用yield时,函数都会被冻结。 当它再次被调用时,它会从最后一个状态继续,并且不会重新开始(除非已完成消耗元素)。
如果你调用函数,你会得到一个generator
,这是你可以迭代的东西。
请注意,这样您可以遍历无限序列而无需使用无限存储器。
def inf():
x = -1
while True:
x = x + 1
yield x
for i in inf():
if i < 10:
print(i)
else:
break
这是因为这些函数不是函数,而是生成器。 yield
语句返回一个值,但不返回该函数。 每次你在生成器上调用next
时,它都会继续执行最后一次调用的生成器,直到它再次达到yield
语句为止。
原则上,您的第一个假设是正确的:函数的变量只有在函数执行时才可用。 但在你的情况下,你正在使用yield
语句。 结果函数调用返回一个迭代器,该迭代器在被调用时返回下一个yield
语句的值。
查看这篇文章,了解迭代器是什么和做什么的进一步解释。
链接地址: http://www.djcxy.com/p/1545.html上一篇: How does a function in Python remember its values after it returns?