函数基础(三) 装饰器\闭包 day 12

目录

  • 昨日回顾
    • 可变长参数
      • *
      • **
    • 函数对象
    • 函数嵌套
    • 名称空间和作用域
  • 今日内容
    • 闭包函数
    • 装饰器
      • 语法糖
      • 装饰器模板
    • 迭代器

昨日回顾

可变长参数

*

*形参:接受多余的位置实参

*实参(可迭代数据类型):打散可迭代数据类型

**

**形参:接受多余的关键字实参

**实参:打散字典.当作关键字实参传参

函数对象

  1. 引用
  2. 作为容器类元素
  3. 作为函数返回值
  4. 作为函数参数

函数嵌套

名称空间和作用域

  1. 内置名称空间:内置方法
  2. 全局名称空间:除了内置和局部就是全局
  3. 局部名称空间:函数内部的变量和函数

执行顺序:内置>全局>局部

搜索顺序:从当前位置开始 局部>全局>内置

全局作用域和局部作用域没有半毛钱关系

两个局部作用域之间也没有关系

今日内容

闭包函数

闭包函数把 闭包函数内部的变量+闭包函数内部的函数两者包裹在一起,然后通过返回值返回出去

装饰器

给函数增加功能的函数

原则:

  1. 不改变源代码
  2. 不改变调用方式
  3. 装饰器本质就是函数
def index():
    '''被装饰的函数'''
    print('index')

语法糖

装饰器必须放在被装饰函数的前面

装饰器模板

def deco(func):
    def wrapper(*args,**kwargs):
        #功能
        res = func(*args,**kwargs)
        return res
    return wrapper

三层装饰器,添加额外的判断参数

迭代器

  • 可迭代对象:具有__iter__方法

    除了数字类型和函数外都是可迭代对象

  • 迭代器对象:含有__iter____next__方法

    只有文件是迭代器对象

迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象

你可能感兴趣的:(函数基础(三) 装饰器\闭包 day 12)