zoukankan      html  css  js  c++  java
  • 生成器

    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. 闭包。

  • 相关阅读:
    Qt控件SDK使用示例大全
    Qt编写地图综合应用45路径规划
    Qt编写地图综合应用43点聚合
    Qt编写地图综合应用44悬浮工具条
    Qt编写地图综合应用38覆盖物矩形
    Qt开发经验小技巧191195
    Qt编写地图综合应用41在线轮廓图
    59.学生选课管理系统
    56.音乐播放平台管理系统
    57.JAVA个人博客管理系统
  • 原文地址:https://www.cnblogs.com/zhangxiangning/p/10219528.html
Copyright © 2011-2022 走看看