zoukankan      html  css  js  c++  java
  • 从入门到自闭之Python三大器--生成器

    1.什么是生成器

    1. 核心:生成器的本质就是一个迭代器
      1. 迭代器是python自带的的
      2. 生成器是程序员自己写的一种迭代器
    2. 编写方式:
      1. 基于函数编写
      2. 推导式编写
    def func ():
    	print("这是一个函数")
    	return“函数”
    func()
    
    def func():
    	print("这是一个生成器")
    	yield"生成器"
    #func()		生成一个生成器
    print(func().__next__)	#启动生成器
    输出结果:获取到的是一个生成器的
    

    1. 内存地址函数体中出现yield代表要声明一个生成器,generator -- 生成器
      获取到的是一个生成器的内存地址
    # 获取到的是一个生成器的内存地址
    # <generator object func at 0x00000087C2A10CA8>
    
    # 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))
    
    # 执行结果:
    # 请输入内容>>>>你好
    # 你好
    # 这是第二次启动
    # 生成器2
    # 生成器3
    # 生成器4
    

    一个yield 必须对应一个next

    # def func():
    #     lst =[]
    #     for i in range(100000):
    #         lst.append(i)
    #     return lst
    # print(func())
    # 输出结果:[0~100000]
    
    1. 用途:节省空间,例题:吃包子问题

    2. 使用场景:

      1. 当文件或容器中数据量较大时,建议使用生成器
    3. 可迭代对象:(python 3 )

      • 优点:list,tuple,str 节省时间,取值方便,使用灵活(具有自己的私有办法)
      • 缺点:消耗内存
    4. 迭代器:

      • 优点:节省空间
      • 缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆
    5. 生成器:

      • 优点:节省空间,人为定义
      • 缺点:不能直接查看值,消耗时间,一次性,不可逆行
    6. yield 和 return 区别:

      1. 相同点
        • 都是返回内容
        • 都可以返回多次,但是return写多个只会执行一个
      2. 不同点
        • return会终止函数,yield是暂停生成器
        • yield能够记录当前执行位置
    7. 区别:通过send区别什么是迭代器,什么是生成器

      • 迭代器的地址<list_iterator>

      • 生成器的地址

        # 数据类型 (pyhton3: range() | python2 :xrange()) 都是可迭代对象 __iter__()
        # 文件句柄是迭代器  __iter__() __next__()
        

    没有send方法就是一个迭代器,具有send方法就是一个生成器

    # def func():
    #     lst = [1,2,3,45,6]
    #     lst1 = ["alex","wusir","taibi","baoyuan"]
    #     yield from lst
    #     yield from lst1
    # g = func()
    # print(g)
    # 输出结果:<generator object func at 0x0000010DA038CF68>
    

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

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

    2. 什么是推导式

    1. 列表推导式:
      1. 循环模式:([变量 for循环])
        • print([i for i in range(10)])
      2. 筛选模式:[加工后的变量 for循环 加工条件]
        • print ([i for i in range(10) if i > 2])
        • print ([i for i in range(10) if i % 2 == 0])
    2. 集合推导式:
      1. 普通循环:{变量 for循环}
        • print ({i for i in range(10)})
      2. 筛选模式:{加工后的变量for循环 加工条件}
        • print({i for i in range (10) if i % 2 == 1})
    3. 字典推导式:
      1. 普通:{键:值 for循环}
        • print {"key":"value" for i in range (10)}
      2. 筛选:{加工后的键:值 for循环 加工条件}
        • print({i : i+1 for i in range(10) if i % 2 == 0})
    4. 生成器推导式(面试必问):
      1. 普通模式:(变量 for 循环)
        • tu = (i for i in range(10))这是生成器,切记
      2. 筛选模式:(加工后的变量 for 循环 加工条件)
    tu = (i for i in range(10)if  i > 5)
    	for i in tu :					
            print(i)
    

    3. 内置函数一:

    1. eval:执行字符串类型的代码

    2. exac:执行字符串社类型的代码

      eval与exac 禁止使用

    3. hash()作用就是区分可变数据类型与不可变数据类型

      # print(hash("123"))
      # print(hash(12))
      # print(hash(-1))
      # print(hash(-10))
      # print(hash((2,1)))
      
      # dic = {[1,2,3]:2}
      # print(hash([1,2,3]))
      
      
    4. help():查看帮助信息

    5. callable():查看对象是否可以调用,

      # def func():
      #     print(1)
      # lst = [1,23,4,]
      # print(callable(lst))   # 查看对象是否可调用
      
      
    6. int():将字符串或数字转换成整型

    7. float():转换成浮点数

    8. complex():复数

    9. bin():十进制转二进制

    10. oct():十进制转八进制

    11. hex():十进制转十六进制

    12. divmod():计算除数与被除数结果,包含一个商和余数的元祖

    13. round():保留浮点数的小数位数,可以设定保留位数,默认保留整数

    14. pow():求x ** y次幂(三个参数的时候为x ** y的结果对第三个参数取余)

    15. bytes():用于不同编码之间的转换,建议使用encode

    16. ord():通过元素获取当前表位编码位置

    17. chr():通过表位序号查找对应的元素

    18. repr():查看数据的原生态(给程序员使用的)

    19. all():判断容器汇总的元素是否都为真,返回true

    20. any():判断容器中的元素有一个为真,就是True

  • 相关阅读:
    Move site collections to a new database
    SharePoint 2010 Site Workflow
    Customizing the Server Ribbon
    [转]深入浅出之正则表达式
    asp.net中MD5加密写法代码
    asp.net中过滤非法字符防止SQL注入
    jQuery中ajax的使用方法
    gridview中用NewSelectedIndex获取选中的ID值
    GridView中得到选中的某行的ID值
    用javascript伪装链接地址状态代码
  • 原文地址:https://www.cnblogs.com/heyulong1214/p/11527911.html
Copyright © 2011-2022 走看看