“对于我在发电机()中:”做什么?

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

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

  • for loop生成一次性变量,如果您像上面一样使用它。 例如,一个list object在循环中一次又一次地被使用,但是一次性迭代器在使用后被自动删除。

    yield是一个像return这样的用于函数的术语。 它会给出结果并在循环中再次使用它。 你的代码给你称为斐波纳契数字。

    def fib():
        a, b = 0,1 #initially a=0 and b=1
        while True: #infinite loop term.
            yield b #generate b and use it again.
            a,b = b, a + b #a and b are now own their new values.
    
    for i in fib(): #generate i using fib() function. i equals to b also thanks to yield term.
        print(i) #i think you known this
        if i>100:
            break #we have to stop loop because of yield.
    

    任何包含yield函数都会返回一个生成器。 for循环运行该生成器以一次返回一个值。

    当你运行:

    for i in fib():
        print(i)
    

    运行发电机的实际机制是:

    _iterator = iter(fib())
    while True:
        try:
            i = next(_iterator)
        except StopIteration:
            break
        print(i)
    

    正如你所看到的,i变量被分配了调用生成器的next()以获得下一个值的结果。

    希望能够清楚说明我来自哪里:-)


    for刚刚超过范围的表达式的vaue。 如果表达式调用一个函数,那么它的值就是函数返回的任何值,所以函数的结果范围为。

    请注意,虽然fib不是函数,但它是一个生成器。 它先后产生每一步的价值。

    链接地址: http://www.djcxy.com/p/1549.html

    上一篇: What does "for i in generator():" do?

    下一篇: Trouble understanding python generators