三大神器
 
一,迭代器
 
1.什么是迭代器(iter)
 
迭代器是容器; 程序中无法直接创建一个迭代器,只能将别的序列转换成迭代器。
 
特点:打印迭代器无法查看所有的元素、也无法获取元素的个数;获取元素的时候每次只能获取最前面的那个元素,而且元素取一个就少一个。
 
2. 查 - 获取元素
 
迭代器不管以什么样的方式获取到了某个元素,那么这个元素一定会从迭代器中消失
 
1)查单个: next(迭代器) - 获取迭代器中最前面的那个元素
 
2)遍历
 
二,生成器
 
1. 什么是生成器
 
生成器也是容器;其他容器是直接保存多个数据,生成器保存的是产生多个数据的算法。
 
生成器获取数据的方式和特点和迭代器一样。
 
2. 创建生成器
 
调用一个带有yield关键字的函数就可以得到一个生成器对象
 
3. 控制生成器产生数据的个数和值
 
一个生成产生的数据的个数和值由创建生成器调用的那个函数的函数体在执行的时候会遇到几次yield以及每次yield后面的值来决定
 
个数: 由遇到的yield的次数决定
 
值:由yield后面的数据决定
 
4. 生成器创建数据的原理(了解)
 
每次获取生成器的数据的时候,就会去执行创建这个生成器的函数体,但是每次执行都只会执行到yield就停下来。
 
四,装饰器
 
1. 什么是装饰器 - 给已经定义好的函数添加功能的工具
 
装饰器就是一个函数,这个函数既是实参高阶函数,又是返回值高阶函数。
 
2. 给函数添加功能
 
解决方案1: 直接修改原函数
 
练习:给函数添加功能,统计函数的执行时间
 
五,无参装饰器
 
1. 无参装饰器语法
 
语法:
def 装饰器名(原函数):
    def 添加完功能的新函数(*args, **kwargs):
        调用原函数
        添加新功能
    return 添加完功能的新函数
        
语法细化:    
def 装饰器名(f):
    def new_f(*arg, **kwargs):
        result = f(*arg, **kwargs)
        新增功能
        return result
    return new_f
装饰器名 - 根据新增的功能来命名
 
六,有参装饰器
 
有参装饰器语法细化:
def 装饰器名称(参数列表):
    def 无参装饰器(f):
        def new_f(*arg, **kwargs):
            result = f(*arg, **kwargs)
            新增功能
            return result
        return new_f
    return 无参装饰器
    
  
参数列表 - 看实现装饰器新增功能需不需要额外的数据需要几个