Python中的函数在返回后如何记住它的值?

这个问题在这里已经有了答案:

  • “yield”关键字有什么作用? 36个答案

  • 一个简单的答案。

    如果你有一个函数可以产生一系列值,你可以使用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?

    下一篇: What does yield do in python 2.7?