• 生成器,生成器推导式和列表推导式


    生成器

    什么是生成器

    python社区,大部分生成器和迭代器是一种.生成器的本质是迭代器.
    唯一区别:生成器是我们自己用python代码构建的数据结构.迭代器都是提供的,或者转化得来的.
    

    获取生成器的三种方式:

    - 生成器函数
    - 生成器表达式
    - python提供的
    

    生成器函数

    - yield
    - 一个next 对应一个yield(yield和下一个yield中间有代码的话只执行一个next时,会停在第一个yield处)
    
    def s():
    	li=[1,2,3,4,5]
    	for i in li:
    		yeild i
    

    yield 与 return的区别

    - return:函数中只存在一个被执行的return,结束函数,并且给给函数的执行者返回值.
    - yield:只要有yiedl那么她就是生成器函数而不是函数了.生成器函数中可以存在多个yield,一个yield对应一个next
    - yield 和return 可以同时存在,如果return先执行了,next()会取不成值.会报错
    

    yield from

    - 将li这个列表变成了一个迭代器返回.每一个next返回一个列表一个元素
    - 优化了内层循环,降低了时间复杂度.提高开发效率
    
    def gen_fun():
        li = [1,2,3,4,5,6]
        yield from li
        
    ret = gen_fun()
    print(next(ret))
    print(next(ret))
    print(next(ret))			依次返回列表元素
    

    生成器表达式,列表推导式

    列表推到式

    - 循环模式:[变量(加工后的变量) for 变量 in iterable]
    	[a for a in [1,2,3]]
    - 筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
    	[a for a in [1,2,3] if a>2]
    

    生成器表达式

    与列表推导式的写法几乎一模一样,也有筛选和循环模式.也可以多层循环构建
    将列表[] 变成() 就变成生成器
    
  • 相关阅读:
    bzoj3237 cdq分治+可撤销并查集
    bzoj2957 奥妙重重的线段树
    bzoj3718 树状数组
    bzoj3991 LCA + set
    codeforces794D dfs+图上hash
    [ZJOI2010]数字计数/烦人的数学作业
    [SCOI2009]windy数
    数位DP(学习笔记)
    UVA10559 方块消除 Blocks
    采蘑菇
  • 原文地址:https://www.cnblogs.com/luyi84895838/p/11726827.html
Copyright © 2020-2023  润新知