生成器

  1. 今日内容大纲

    1. 生成器

      • yield

      • yield return

      • yield from

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

    3. 内置函数 I

       

  2. 昨日内容回顾作业讲解

    1. 可迭代对象:

      • 可以更新迭代的实实在在值。

      • 内部含有'__iter__'方法的。

      • str list tuple dict set range

      • 优点:操作方法多,操作灵活,直观,

      • 缺点:占用内存。

    2. 迭代器:

      • 可以更新迭代的一个工具(数据结构)。

      • 内部含有'__iter__'``且含有__next__方法的的。

      • 文件句柄。

      • 优点:节省内存。惰性机制。

      • 缺点:不直观,速度相对慢,操作方法单一,不走回头。

    3. 格式化输出。

    4. 函数名的应用。

    5. 默认参数可变的数据类型坑。作用域的坑。

     

  3. 今日内容

    • 生成器

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

        • 获取生成器的三种方式:

          • 生成器函数。

          • 生成器表达式。

          • python内部提供的一些。

      • 生成器函数获得生成器:

       1  函数
       2  def func():
       3      print(111)
       4      print(222)
       5      return 3
       6  ret = func()
       7  print(ret)
       8  9  生成器函数
      10  def func():
      11      print(111)
      12      print(222)
      13      yield 3
      14      a = 1
      15      b = 2
      16      c = a + b
      17      print(c)
      18      yield 4
      19  ret = func()
      20  # print(ret)
      21  print(next(ret))
      22  print(next(ret))
      23  print(next(ret))
      24  一个next 对应一个yield
      25
      • yield return

        return:函数中只存在一个return结束函数,并且给函数的执行者返回值。 yield:只要函数中有yield那么它就是生成器函数而不是函数了。生成器函数中可以存在多个yield,yield不会结束生成器函数,一个yield对应一个next。

      • 吃包子练习题:

         1  def func():
         2      l1 = []
         3      for i in range(1,5001):
         4          l1.append(f'{i}号包子')
         5      return l1
         6  ret = func()
         7  print(ret)
         8  9  def gen_func():
        10      for i in range(1,5001):
        11          yield f'{i}号包子'
        12  ret = gen_func()
        13  # [3号包子.]
        14  for i in range(200):
        15      print(next(ret))
        16 17  for i in range(200):
        18      print(next(ret))
        19
      • yield from

         
         1  def func():
         2      l1 = [1, 2, 3, 4, 5]
         3      yield l1
         4  ret = func()
         5  print(next(ret))
         6  7  8  9  def func():
        10      l1 = [1, 2, 3, 4, 5]
        11      yield from l1
        12      '''
        13      yield 1
        14      yield 2
        15      yield 3
        16      yield 4
        17      yield 5
        18      '''
        19      将l1这个列表变成了迭代器返回。
        20  ret = func()
        21  print(next(ret))
        22  print(next(ret))
        23  print(next(ret))
        24  print(next(ret))
        25  print(next(ret))
        26
         

         

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

      • 用一行代码构建一个比较复杂有规律的列表。

      • 列表推导式:

        • 循环模式:[变量(加工后的变量) for 变量 in iterable]

        • 筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]

      • 循环模式讲解

        练习题:

         

    • 内置函数 I

  4. 今日总结

    1. 生成器:***

    2. 生成器函数 yield

    3. yield与return 区别。yield from

    4. 列表推导式,生成器表达式。 ***

    5. 内置函数:今天讲的内置函数,了解。

  5.  

  6. 预习内容

    1. lambda表达式。

    2. 内置函数 II.

    3. 闭包。

原文地址:https://www.cnblogs.com/zhangxiangning/p/10219528.html