美文网首页
python 生成器

python 生成器

作者: ScienBeast | 来源:发表于2021-08-07 19:23 被阅读0次

    迭代器

    迭代器就是用于迭代操作(for 循环)的对象,它像列表一样可以迭代获取其中的每一个元素,任何实现了 next 方法 (python2 是 next)的对象都可以称为迭代器。

    它与列表的区别在于,构建迭代器的时候,不像列表把所有元素一次性加载到内存,而是以一种延迟计算(lazy evaluation)方式返回元素,这正是它的优点。比如列表含有中一千万个整数,需要占超过400M的内存,而迭代器只需要几十个字节的空间。因为它并没有把所有元素装载到内存中,而是等到调用 next 方法时候才返回该元素(按需调用 call by need 的方式,本质上 for 循环就是不断地调用迭代器的next方法)。

    生成器

    普通函数用 return 返回一个值,和 Java 等其他语言是一样的,然而在 Python 中还有一种函数,用关键字 yield 来返回值,这种函数叫生成器函数,函数被调用时会返回一个生成器对象,生成器本质上还是一个迭代器,也是用在迭代操作中,因此它有和迭代器一样的特性,唯一的区别在于实现方式上不一样,后者更加简洁

    def fib(n):
        curr=1
        prev=0
        for i in range(0,10):
                    yield curr
                    prev,curr=curr,curr+prev
    
    
    print [i for i in fib(10)]
    ----
    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
    
    

    yield 对应的值在函数被调用时不会立刻返回,而是调用next方法时(本质上 for 循环也是调用 next 方法)才返回

    生成器表达式

    >>> l=(x for x in range(0,10) if x !=0)
    >>> print l
    <generator object <genexpr> at 0x7f7cab3abaf0>
    >>> [i for i in l]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    相关文章

      网友评论

          本文标题:python 生成器

          本文链接:https://www.haomeiwen.com/subject/kidcactx.html