Day12 生成器,列表推导式,生成器表达式,内置函数

昨日内容回顾

  1. 可迭代对象:

    • 可以更新迭代的实实在在的值
    • 判断方法:内部含有__iter__ 方法 就是可迭代对象
    • str list tuple dict range ret
    • 优点:操作方法多,操作灵活,直观
    • 缺点:占用内存
  2. 迭代器:

    • 可以更新迭代的一个工具(数据结构)。
    • 判断方法:内部含有 __iter__ 并且含有 __next__ 方法的就是迭代器
    • 文件句柄
    • 优点:节省内存。惰性机制(只有调用才有值)
    • 缺点:不直观。速度相对较慢,操作方法比较单一,不走回头路
  3. 格式化输出

  4. 函数名的应用

    函数名相当于一个特数的变量,所以函数名具有变量的特性

  5. 默认参数可变的数据(坑)。作用域的(坑)

今日内容

  1. 生成器:

    • 生成器:python社区,生成器与迭代器看成一种。生成器的本质就是迭代器。

    • 生成器和迭代器的区别:生成器是我们自己用python代码构建的数据结构。迭代器都是提供的,或者是转化的来的

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

      • 生成器函数
      • 生成器表达式
      • python内部提供的一些。
    • 生成器函数获取一个生成器。

    • yield

      # 函数
      def func():
          print(111)
          print(222)
          return 333
      func()
      
      # 生成器
      def func():
          print(111)
          print(222)
          yield 3
          yield 4
      ret = func()
      print(ret)
      print(next(ret))
      
    • yield 和 return 区别:

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

      # 吃包子案例
      
      # 普通方法
      def gen_func():
          l1 = []
          for i in range(1,5001):
              l1.append(f'{i} of baozi')
          return l1
      print(gen_func())
      
      # 普通方法,直接产生在内存中
      
      # 使用生成器的方法
      def gen_func():
          for i in range(1,5001):
              yield f'{i} of baozi'
      ret = gen_func()
      for i in range(1,201):
          print(next(ret))
      
  2. 生成器表达式,列表推导式

    • 定义:用一行代码构建一个比较有规律的列表

    • 列表推导式:

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

      # 将10以内所有整数的平方写入列表:
      
      # 普通方法:
      l1 = []
      for i in range(1,11):
          l1.append(i**2)
      print(l1)
      
      # 列表推导式:
      print([i**2 for i in range(1,11)])
      
      # 100以内所有的偶数写入列表
      
      # 普通方法
      l1 = []
      for i in range(2,101,2):
          l1.append(i)
      print(l1)
      
      # 列表推导式
      print([i for i in range(2,101,2)])
      
      # 筛选模式
      # 30 以内能被3整除的数
      
      # 普通方法
      l1 = []
      for i in range(1,31):
          if i % 3 == 0:
              l1.append(i)
      print(l1)
      
      # 列表推导式
      print([i for i in range(1,31) if i % 3 == 0])
      
  3. 内置函数:

    • eval函数 exec函数 处理数据流
    • hash函数:获取哈希值
    • callable函数:判断是否可以被调用

今日总结

  1. 生成器
  2. 生成器函数 yield
  3. yield 和 return 的区别,yield from
  4. 列表推导式
  5. 生成器表达式
  6. 内置函数
posted on 2020-07-03 23:05  calm_alone  阅读(106)  评论(0)    收藏  举报