阶段01基础篇_D09_生成器generator 迭代器iterator 列表推导式

生成器generator 迭代器 iterator 列表推导式

生成器 generator

  • 生成器与迭代器是一种,生成器的本质就是迭代器,唯一的区别:生成器是我们自己用python代码构建的数据结构。迭代器都是python提供的,或者转化得来的。

  • 一个包含yield关键字的函数就是一个生成器函数

  • 并且yield不能和return共用,并且yield只能用在函数内。

  • 生成器Demo:
    import time
    def generator_demo(n):
        "这个函数在每次循环时都会产生一个值,之后将其返还给它的调用者。"
        "有yield的函数称为生成器,这个函数就是生成器函数"
        for i in range(1, n+1):
            yield f"{i} square = {[i**2]}"
    
    g = generator_demo(10000)  # 创建生成器对象
    print(g)   # <generator object generator_demo at 0x0000020C906CC660>
    # 在一个for循环中时,在循环中每一次完成函数的yield语句后,控制权都会返还给函数
    for i in g:   
        print(i)
        time.sleep(1)
    

迭代器 iterator

  • 迭代是访问集合元素的一种方式;
  • 迭代器是一个可以记住遍历的位置的对象。
  • 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
  • 迭代器有两个基本的函数iter() 和 next()
  • 字符串,列表,元组对象都可以用于创建迭代器:
list = [1, 2, 3, 4]
it = iter(list)
print(next(it))      # 1
print(next(it))      # 2
  • 迭代器对象可以用for遍历:
list = [1, 2, 3, 4]
it = iter(list)
for i in it:
    print(i, end=" ")   # 1 2 3 4 
  • 也可以使用next()函数:
import sys
list = [1, 2, 3, 4]
it = iter(list)
while True:
    try:
        print(next(it))
    except StopIteration:
        sys.exit()

列表推导式

  • 描述:

    • 是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。
  • 共有三种推导式:

    • 列表(list)推导式

      l1 = [i for i in range(11) if i % 3 == 0]
      print(l1)    # [0, 3, 6, 9]
      
      l2 = [i for i in range(1, 11)]
      print(l2)    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      
      l3 = [i**2 for i in range(1, 7)]
      print(l3)    # [1, 4, 9, 16, 25, 36]
      
  • 字典(dict)推导式

    d = {v.lower(): k.upper() for k, v in dict.items()}
    print(d)  # {'apple': 'A', 'button': 'B'}
    
  • 列表(set)推导式

    s1 = {i+i for i in "python"}
    print(s1)    # {'tt', 'pp', 'yy', 'hh', 'oo', 'nn'}
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容