zoukankan      html  css  js  c++  java
  • python yield yield from

    1.可迭代对象

    具备可迭代的能力,即enumerable,在python中指的是可以通过for-in去逐个访问元素的一些对象,比如元组tuple,列表list,字符串string,文件对象file等。

    2.迭代器

    通过另一种方式一个一个访问可迭代对象中的元素,enumerator。在python中指的是给内置函数iter()传递一个可迭代对象作为参数,返回的那个对象就是迭代器,通过迭代器的next()方法逐个去访问。

    3.生成器

    生成器的本质是一个逐个返回元素的函数,本质是个函数。

    最大的好处在于它是“延迟加载”,即对于处理长序列问题,更加的节省存储空间。即生成器每次在内存中只存储一个值,比如打印一个斐波拉切数列:原始的方法可以如下所示

    def fab(max): 
        n, a, b = 0, 0, 1 
        L = [] 
        while n < max: 
            L.append(b) 
            a, b = b, a + b 
            n = n + 1 
        return L
    
    
    这样做最大的问题在于将所有的元素都存储在了L里面,很占用内存,而使用生成器则如下所示
    
    def fab(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b                 #每次迭代时值加载这一个元素,而且替换掉之前的那一个元素,这样就大大节省了内存。而且程序在遇见yield语句时会停下来,这是后面使用yield阻断原理进行多线程编程的一个启发,(python协程编程会在后面讲到)
            a, b = b, a + b
            n = n + 1
    
    生成器其实就是下面这个样子,写得简单一些就是一次返回一条,如下:
    
    def generator():
        for i in range(5):
            yield i
    
    def generator_1():
        yield 1
        yield 2
        yield 3
        yield 4
        yield 5
    

     4. yield from

    yield from  generator 。实际上就是返回另外一个生成器

    def generator1():
        item = range(10)
        for i in item:
            yield i
    
    def generator2():
        yield ‘a‘
        yield ‘b‘
        yield ‘c‘
        yield from generator1() #yield from iterable本质上等于 for item in iterable: yield item的缩写版
        yield from [11,22,33,44]
        yield from (12,23,34)
        yield from range(3)
    
    for i in generator2() :
        print(i)
    

    从上面的代码可以看书,yield from 后面可以跟的式子有“ 生成器  元组 列表等可迭代对象以及range()函数产生的序列”

    上面代码运行的结果为:

    a
    b
    c
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    11
    22
    33
    44
    12
    23
    34
    0
    1
    2

    原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9248641.html

  • 相关阅读:
    MySQl数据约束练习
    MySQL查询实例
    网络通信协议简介(TCP与UDP)
    数据类型转换
    C++编译过的C代码为什么要用extern C
    hashtable
    以RB-tree为底层机制的几个关联式容器
    红黑树(RB-Tree)
    slist
    deque
  • 原文地址:https://www.cnblogs.com/baxianhua/p/10150430.html
Copyright © 2011-2022 走看看