python打印内部vs外部功能?

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

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

  • 在你的代码中, fibon是一个生成器函数。 当你调用它返回生成器对象。 你可以从函数中删除yield

    def fibon(n):
        a = b = 1
        for i in range(n):
            a, b = b, a + b
            print(a)  # move here inside function but doesnt print?
    
    fibon(20)
    

    或从生成器对象构造列表

    def fibon(n):
        a = b = 1
        for i in range(n):
            yield a
            a, b = b, a + b
            print(a)  # move here inside function but doesnt print?
    
    list(fibon(20))
    

    yield语句使该函数返回一个generator object ,而不仅仅是一个函数。

    总之,python生成器是迭代器。 描述简单发电机的PEP 255。 通过调用生成器对象的下一个方法或在for循环中使用生成器对象,可以使用生成器。

    要执行生成器,您需要遍历它。 因此, for x in fibon(20)中的for x in fibon(20)迭代,而fibon(20)返回一个生成器对象。

    def fibon(n):
           a = b = 1
           for i in range(n):
               yield a
               a, b = b, a + b
    fibon(5)
    <generator object fibon at 0x00000000034A6A20>
    
    for i in fibon(5):
        print i
    
    # list() can be used too, because it accepts generator as a param
    fibos = list(fibon(5))
    

    如果您只是更改要printyield语句,就会得到常规功能。 但我不会建议使用斐波纳契,收益率选择是最好的选择。

    >>> fibon
    <function fibon at 0x0000000002D31C88>
    

    如果目标只是打印数字,只要用print替换yield就足够了。

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

    上一篇: python print inside vs outside function?

    下一篇: About generator in Python