zoukankan      html  css  js  c++  java
  • Python3基础笔记--生成器

    目录:                                                  

    一、列表生成器

    二、生成器

    三、迭代器

    一、列表生成器

    a = [x for x in range(10)]
    
    b= [y*2 for y in range(10)]
    
    def f(n)
        return n*n*n
    
    c = [f(z) for z in range(10)]

     列表生成器会将所有的内容加载到内存中,在生成大量的数据时,会占用内存

    生成器只会生成一个  generator object   ,占用很少内存,只会在调用时才产生值。且只能按顺序取值

    二、生成器

    1、基础代码

    b = (x for x in range(10))
    print(b)
    
    print(next(b))    # 等价于 b.__next__()   等价于python2中的b.next()
    print(b.__next__())
    
    for i in b:
        print(i)
    
    
    '''output
    <generator object <genexpr> at 0x000002900B1BB308>
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    '''

     2、两种生成方式

    ①   (x for x in range(10))

    ②  yield方式

    第②种代码

    def foo():
        print("ok")
        yield 1
        
        print("fine")
        yield
    
    g = foo()
    print(g)
    
    # next(g)
    # aa = next(g)
    # print(aa)
    
    for i in g:
        print(i)

    遇到函数中有  yield   则该函数为生成器

    一个yield是一个生成器的生成物的结点,它会返回yield 后面的内容,然后结束,直到下一个next的调用 

     3、send()方法

    def bar():
        c = yield 0
        print(c)
        print("ok1")
        count = yield 1
    
        print(count)
        print("ok2")
        yield 2
    
    g = bar()
    print(g)
    
    # print(next(g))
    print(g.send('ccc'))   # TypeError: can't send non-None value to a just-started generator
    
    print(g.send("qqqq"))

    send()方法与next()方法类似,但可以向生成器中传值,用于一些交互场景,但在第一个send()前如果没有next(),只能传一个send(None),否则会出现  TypeError: can't send non-None value to a just-started generator

    三、迭代器

    参考博客:Python之路,Day4 - Python基础4 (new版)

          Py西游攻关之迭代器&生成器

    什么是迭代器?

    满足两个条件:①有iter方法  ②有next方法

    区别迭代器与可迭代对象

    from collections import Iterator,Iterable
    
    l = [1, 2, 3]
    
    print(isinstance(l,list))
    print(isinstance(l,Iterator))   # False   不是迭代器
    print(isinstance(l,Iterable))   # True    是可迭代对象
    
    for i in l:
        print(i)
  • 相关阅读:
    Linux Shell 01 脚本与变量
    Linux下shell颜色配置
    Linux下Redis安装及配置
    Linux Shell 03 条件测试
    OSX下VirtualBox安装CentOS
    Log4j配置与使用
    Linux 环境变量的配置
    OS X下安装Redis及配置开机启动
    圈复杂度
    (转)Qt Model/View 学习笔记 (一)——Qt Model/View模式简介
  • 原文地址:https://www.cnblogs.com/panlei3707/p/8471974.html
Copyright © 2011-2022 走看看