zoukankan      html  css  js  c++  java
  • <python全栈开发基础>学习过程笔记【17d】生成器

    1.列表生成式

    >>> [i**2 for i in range(10)]
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

    这个过程是从range(10)列表中依次取元素,计算元素的平方,再放到另一个列表中

    2.可以把【1】中的代码写成这种形式

    >>> def f(x):
        return x**2
    
    >>> [f(i) for i in range(10)]
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

    3.元组(列表)内元素个数为n,用元组(列表)给n个变量赋值

    >>> a=(1,2,3)
    >>> x,y,z=a
    >>> x
    1
    >>> y
    2
    >>> z
    3
    >>> b=[1,2,3]
    >>> x1,y1,z1=b
    >>> x1
    1
    >>> y1
    2
    >>> z1
    3

    4.生成器有两种创建方式

    方法一:

    >>> ( i**2 for i in range(10))
    <generator object <genexpr> at 0x03B21480>
    

     generator就是生成器

        这里我们生成了一个生成器对象,为什么我们要生成这样一个对象,而不是列表?因为列表是把值存在列表中...当数据很多时,非常消耗内存。

        生成器对象中什么都没存...但它什么都能搞到。用生成器省了空间。

    生成器中的值只能一个一个的取

    >>> g=( i**2 for i in range(10))
    >>> next(g)   
    0
    >>> next(g)
    1
    >>> next(g)
    4
    >>> next(g)
    9
    >>> next(g)
    16
    >>> next(g)
    25
    >>> next(g)
    36
    >>> next(g)
    49
    >>> next(g)
    64
    >>> next(g)
    81
    >>> next(g)    #越界
    Traceback (most recent call last):
      File "<pyshell#34>", line 1, in <module>
        next(g)
    StopIteration

    生成器是一个可迭代对象,所以上面的代码可以简写为:

    >>> s=(i**2 for i in range(10))
    >>> for i in s:   #内部:for in循环自动调用next,得到一个值,用i取这个值,使用之后,这个值被垃圾回收机制删除...所以很节省空间
        print(i)
    
        
    0
    1
    4
    9
    16
    25
    36
    49
    64
    81

    方法二:

    使用关键字yield

    生成器的本质是一个带yield关键字的函数

    >>> def a():
        print("ok1")
        yield 1   #yield返回一个值
        print("ok2")
        yield 2
    
        
    >>> next(a())    #a()就是一个生成器,每一次next()都会运行到返回一个值为止
    ok1
    1
    >>> next(a())
    ok1
    1

    当然还有下面的写法:

    >>> for i in a():   #i每次存一个yield返回的值
        print(i)
    
        
    ok1
    1
    ok2
    2

    5..什么是可迭代对象?可迭代对象可以使用for in

    内部有iter方法的对象就是可迭代对象

    可迭代对象有:列表,元组,字符串,字典,生成器对象

  • 相关阅读:
    字符串旋转词、句子逆序化、字符串移位、最小字典序字符串问题
    字符串匹配算法——BF、KMP、Sunday
    字符串问题简述与两个基本问题的Java实现——判断二叉树拓扑结构关系与变形词
    PowerDesigner使用笔记
    SpringMVC学习笔记八:文件上传下载(转)
    小程序实现原理解析
    Flink流处理之迭代案例
    关于“淘宝爆款”的数据抓取与数据分析
    基于内容的推荐 java实现
    qt坐标系统与布局的简单入门
  • 原文地址:https://www.cnblogs.com/iamjuruo/p/7348630.html
Copyright © 2011-2022 走看看