装饰器迭代器生成器

装饰器

  • 什么是装饰器

    装饰器的本质就是一个实参高阶函数或返回值高阶函数

    装饰器的作用就是在不修改原函数的前提下给函数添加功能

  • 装饰器

    语法:

    def 函数(func):

    ​ def test(*args,**kwargs):

    ​ func(*args,**kwargs)

    ​ 添加新功能

    ​ return test

    说明:

    函数 - 装饰器对应的函数名,也是装饰器的名字(与添加功能相关)

    func - 指向的是需要添加新功能的函数

    test - 指向的是已经添加完功能的新函数

  • 有参的装饰器

    如果在实现装饰器新增功能时需要额外数据,那么就可以使用有参的装饰器

    def 装饰器名称(装饰器的参数列表):

    ​ def test1(func):

    ​ def test2(*args.**kwargs):

    ​ func(*args,**kwargs)

    ​ 添加新功能

    ​ return test2

    ​ return test1

迭代器

  • 什么是迭代器

    • 迭代器特点

      迭代器是一种特殊的容器,1.不能直接查看所有元素(print看不到任何元素,不能计算长度)

      2.若要读取元素的值必须将元素从迭代器中取出,且取出后再也放不回去,迭代器中不再有该元素

    • 怎么创建迭代器

      1.将其他序列转换成迭代器

      iter(序列)

      2.创建生成器(生成器本质是迭代器)

  • 获取迭代器元素

    注意:不管以什么形式取出迭代器中的元素,这个元素在迭代器中都不存在了

    • 获取单个元素

      next(迭代器) - 获取迭代器中最前面的一个元素

    • 遍历

      for 变量 in 迭代器:

生成器

  • 生成器

    生成器的本质就是一个迭代器

    生成器是能够产生多个数据的容器,而不是真正同时保存多个数据的容器

  • 创建生成器

    调用带有yield关键字的函数就能得到一个生成器

    调用普通函数:执行函数体;获取返回值

    调用带有yield关键字的函数:不执行函数体;获取的是生成器对象

  • 生成器怎么生成数据

    • 一个生成器能产生多少数据

      看执行生成器对应的函数在函数结束时能遇见几次yield就产生多少个数据

    • 生成器生成的数据是哪些

      看每次遇见yield时yield后面的数据是什么,产生的数据就是什么

  • 生成器生成数据的原理

    调用函数创建生成器对象时不会执行函数体,当获取生成器中元素的时候才会执行函数体

    获取第一个元素时从函数开始执行,执行遇到第一个yield就会停下,并且将yield后面的数据作为这次获取到的元素

    下次获取元素时会从上一次结束的位置接着往后执行函数体,直到遇见下一个yield,并将新的yield后的数据作为此次获取到的元素,以此类推

    如果从上次结束的位置到函数结束都没有遇到yield,则这个生成器就不会再创建数据,如果是next操作就会报错

你可能感兴趣的:(Python,python,生成器)