python_0基础开始_day12

第十二节

一,生成器

  • 生成器的核心:生成器的本质就是迭代器

    • 迭代器是python自带的

    • 生成器是程序员自己写的一种迭代器

  1. 在python中有三种方式来创建生成器:

    • 基于函数编写

    • 推导式方式编写

    • python内置函数或者模块提供(其实1,3两种本质上差不多,都是通过函数的形式生成,只不过1是自己写的生成器函数,3是python提供的生成器函数而已)

    # def func():
    #     print("这是一个函数")
    #     return "函数"
    # func()

    def func():
       print("这是一个生成器")
       yield "生成器"
    # 坑
    func() # 生成一个生成器
    print(func().__next__())  # 启动生成器
    print(func().__next__())
  2. yield与return:

    • 相同点:

      • 都是返回内容

      • 都可以返回多次(但是return写多个只会执行一个)

    • 不同点:

      • return是终止函数,yield是暂停生成器

      • yield能够记录当前执行位置

  3. 一个yield对应一个next

    def func():
       msg = input("请输入内容")
       yield msg
       print("这是第二次启动")
       yield "生成器2"
       yield "生成器3"
       yield "生成器4"

    g = func()
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
  4. 可迭代对象,迭代器,生成器的区别:

    • 可迭代对象:

      • 优点:list,tuple,str 节省时间,取值方便,使用灵活(具有自己的方法)

      • 缺点:大量消耗内存

    • 迭代器:

      • 优点:节省空间

      • 缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆行

    • 生成器:

      • 优点:节省空间,人为定义

      • 缺点:不能直接查看值,消耗时间,一次性,不可逆行

    # 数据类型 
    #(pyhton3: range() | python2 :xrange()) 都是可迭代对象 __iter__()
    # 文件句柄是迭代器 __iter__() __next__()
    # 没有send方法就是一个迭代器,具有send方法的就是一个生成器

     

  5. 使用场景

    • 当文件或容器中数据量较大时,建议使用生成器。

  6. 区别什么是迭代器,什么是生成器

    • 迭代器的地址 :iterator

    • 生成器的地址 :generator

    • yield 将可迭代对象一次性返回

    • yield from 将可迭代对象逐个返回

    def func():
       lst = [1,2,3,45,6]
       lst1 = ["alex","wusir","taibi","baoyuan"]
       yield from lst
       yield from lst1

    g = func()

     

二,推导式

    • 普通循环

      print([i for i in range(10)]) # list
      # print([变量 for循环])
      print({i for i in range(10)}) # set
      # print({变量 for循环})
      print({i: i+1 for i in range(10)}) # dict
      # print({键:值 for循环})
    • 筛选模式

      print([i for i in range(10) if i > 2]) # list
      # print([加工后的变量 for循环 加工条件])
      print({i for i in range(10) if i % 2 == 1}) # set
      # print({加工后的变量 for循环 加工条件})
      print({i: i+1 for i in range(10) if i % 2 == 0}) # dict
      # print({加工后的键:值 for循环 加工条件})
  1. 没有元组推导式。

  2. 生成器推导式

    • 普通模式

    tu = (i for i in range(10)) 
    print((变量 for循环))
    • 筛选模式

    tu = (i for i in range(10) if i > 5)
    print((加工后的变量 for循环 加工条件))

三,内置函数Ⅰ

  1. 了解即可

    • type():运算字符串中的算数

    • eval():运行字符串中的代码

    • hash():区分可变和不可变数据类型

    • help():查看帮助信息

    • callable():查看对象是否可调用

    • float():查看浮点数

    • complex():复数

      • bin():十进制转二进制

      • oct():十进制转八进制

      • hex():十进制转十六进制

    • divmod(除数,被除数):(商,余)

    • round(小数,保留位数):保留小数位

      • pow():两个参数求幂

      • pow(2,2,3):两个参数求幂后的余

    • bytes(str,encoding="utf-8"):将字符串进行编码

    • ord():通过元素获取当前表位的序号

    • chr():通过表位序号查找元素

    • repr():查看数据的原生态

    • all():判断容器中的元素是否都为真

    • any():判断容器中的元素是否有一个为真

    • locals():查看当前空间变量

    • globals():查看全局空间变量

    • format():

    •  

你可能感兴趣的:(python_0基础开始_day12)