• 第十二章


    day12

    第十二章

    1、 生成器

    什么是生成器?核心:生成器的本质就是一个迭代器

    迭代器是python 自带的

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

    def func():
        print("这是一个函数")
        return "函数"
    func()
    
    def dunc():
        print("这是一个生成器")
        yield "生成器"
    
    
    1. 生成器的编程方式:

      基于函数编写

      推导式编写

    2. 函数中出现yield代表要声明一个生成器(generator-- 生成器)

    3. 一个yield 对象一个next()

      def func():
          msg = input("请输入内容")
          yield msg
          yield "生成器2"
          yield "生成器3"
          yield "生成器4"
          
      g = func()
      print(next(g))
      print(next(g))
      
    4. yield 和 return 的区别

      1. 相同点:

        都是返回内容

        都是返回多个,但是return写多个只会执行一个

      2. 不同点:

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

        yield 能够记录当前执行位置

    5. 生成器的作用:节省空间

      1. 可迭代对象:

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

        缺点:大量消耗内存

      2. 迭代器

        优点:节省空间

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

      3. 生成器

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

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

    6. 使用场景:

      1. 当文件或容器中数据较大时,建议使用生成器
    7. 区别什么是迭代器,什么是生成器?

      1. 通过地址

        迭代器的地址:<list_iterator object at 0x000000987B6E97F0>生成器的地址:<generator object func at 0x00000087C2A10CA8>

      2. 通过send()方法:send() 方法第一次必须发送None

        没有send()方法就是迭代器

        有send()方法就是生成器

        def func():
            a = yield 1
            print(a)
            b = yield 2
            print(b)
            
        g = func()
        print(g.send(None))   # send  -- 发
        print(g.send("alex"))   # send  -- 发送
        print(g.send("宝元"))   # send  -- 发送
        
        
    8. yield 和 yield from的区别

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

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

      def func():    
          def foo():     
              print(11)  
          lst = {"key":1,"key1":2}   
          yield foo
      print(func().__next__())
      def func(): 
          lst = [1,2,3,45,6]   
          lst1 = ["alex","wusir","taibi","baoyuan"]  
          yield from lst   
          yield from lst1
      g = func()
      for i in g:  
          print(i)
      lst = [1,2,3,45,6]l
      st1 = ["alex","wusir","taibi","baoyuan"]
      
      for i in lst,lst1: 
          print(i)
      

    2、 推导式

    1. 列表推导式:

      普通循环:变量for循环

      print([i for i in range(10)])
      

      筛选模式:加工后的变量for 循环加工条件

      print([i for i in range(10) if i % 2 ==0])
      
    2. 集合推导式

      普通循环:变量for循环

      print({i for i in range(10)})
      

      筛选模式:加工后的变量for循环加工条件

      print({i for i in range(10) i % 2 ==0})
      
    3. 字典推导式

      普通循环:{键:值 for循环}

      print({i: i+1 for i in range(10)})
      

      筛选:{加工后的键:值 for循环 加工条件}

      print({i: i+1 for i in range(10) i % 2 ==0})
      
    4. 生成器推导式

      普通循环:(变量for 循环)

      tu = (i for i in range(10))
      

      筛选:(加工后的变量 for 循环 加工条件)

      tu = (i for i in range(10) if i % 2 == 0)
      
      数据类型 (pyhton3: range() | python2 :xrange()) 都是可迭代对象 __iter__()文件句柄是迭代器  __iter__() __next__
      

    3、内置函数一

    1. eval():神奇一

      a = "88 + 99"
      print(eval(a))
      
    2. exec():神奇二

      a = """
      def func():
      	print(111)
      func()
      """
      exec(a)
      

      注意:千万记住禁止使用

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

      print(hash("123"))
      print(hash(12))
      print(hash(-1))
      
    4. help() 查看帮助信息

      help(list)
      
    5. callable() 查看对象是否可调用

      def func():
          print(1)
      lst = [1,2,3]
      print(callable())
      
    6. int() 将字符串或数字转成为整形

      print(int())
      print(int("12"))
      print(int(3.6))
      
    7. float() 将整形和字符串转成浮点型

      print(float(3))
      
    8. complex() 复数

      print(complex(20))
      
    9. bin() 十进制转成二进制0b

      print(bin(100))
      
    10. oct() 十进制转成八进制0o

      print(oct(10))
      
    11. hex() 十进制转成16进制 0x

      print(hex(17))
      
    12. divmod() 求商和余数 (商 余)

      print(divmod(21,2))
      
    13. round() 保留小数位

      print(round(2.89656765,2))
      
    14. pow() 幕运算pow当做是两个参数时参数时是求幕,三个参数时就是求幕取余

      print(pow(2,2))
      print(pow(2,2,3))
      
    15. bytes() 将字符串进行编码

      s = "你好"
      s1 = bytes(s,encoding("utf-8"))
      print(s1)
      
    16. ord()通过元素获取当前表位的序号

      print(ord("你"))
      
    17. chr(): 通过表位序号查找元素

      print(chr(20320))
      
    18. repr() 查看数据的原生态,给程序员使用的

      a = "yuan"
      print(repr(a))
      print(a)
      
    19. all()判断容器中的元素是否都为真(and)

      lst = [1, 2, 3, 4]
      print(all(lst)
      
    20. any()判断容器中元素是否有个为真

      lst = [1, 2, 3]
      print(any(lst))
      
    21. globals() 查看全局变量

      print(globals())
      
    22. locals() 查看当前空间变量

      a = 10
      def func():
          a = 1
          print(locals())
          print(1)
      func()
      
    23. frozenset() 冻结集合

      词法分析:检查是否存在

      语法分析:关键字使用是否有误

      语义分析:逻辑是否有误

    函数的默认参数陷阱:

    默认参数为列表或字典时注意有坑

  • 相关阅读:
    ChukWa入门1
    asp.net常用代码集锦
    泛型讲解
    深入宠物店PetShopSQLServerDAL数据访问与SampleDuwamish比较
    写有效率的SQL查询(转载)
    VisualStudio2005技巧集合
    iptables总结【转载】
    vmware workstation 如何注册
    4.继承
    Linux系统下源代码包方式 安装前准备[1]
  • 原文地址:https://www.cnblogs.com/yuancw/p/11503754.html
Copyright © 2020-2023  润新知