1. 闭包:
闭包就是能够读取其他函数内部变量的函数
1.1 python 闭包的作用:
保存外部函数的变量,不会随着外部函数调用完而销毁
1.2 python 闭包的形成条件:
# 1. 函数嵌套
# 2. 内部函数必须使用了外部函数的变量或者参数
# 3. 外部函数返回内部函数 这个使用了外部函数变量的内部函数称为闭包
示例如下:
输出结果为
这里的结果为11 其中外部函数num1 = 10 调用外部函数的变量num1 并输入参数num2 = 1
所以结果为11
2. 装饰器:
实质上也是一个闭包函数,也就是说,他也是一个函数嵌套。
2.1 装饰器的作用:
在不改变原函数的情况下,对已有函数进行额外的功能扩展。
2.2 装饰器的形成条件(与包的区别):
# 1.不修改已有函数的源代码
# 2.不修改已有函数的调用方式
# 3.给已有函数增加额外的功能
注意与包的区别:装饰器实质上是一个闭包函数,但是装饰器这个闭包函数。他的参数有且只有一个并且是函数类型的话,他才是装饰器,否则他就是闭包函数!
示例如下:
这个装饰器的作用是 获取从1到10000循环所需的时间 添加这个计时器的功能
大概格式就是:
1.先定义一个装饰器
2.然后把装饰器加到所需装饰的函数里面 使用装饰器语法糖的方式装饰带有参数的函数
@decorator
需要装饰的函数
执行结果为:
2.3 带参数的装饰器
2.4 万能装饰器
# 以下才是万能装饰器
@decorator # 等价于 add_num = decorator(add_num) add_num = inner
def add_num(*args, **kwargs):
result = 0
# args: 元组
# kwargs:字典类型
for value in args:
result += value
for value in kwargs.values():
result += value
return result
@decorator
def show(): # show = decorator(show) show = inner
print("哈哈")
show()
result = add_num(1, 2)
print("结果为:", result)
# if __name__ == '__main__':
# my = {"a": 1}
# print(**my)
2.5 类装饰器
先定义一个类装饰器,再把类装饰器放到所需的函数上面
@MyDecorator
需要装饰的函数
实例如下:
运行结果为:
感谢提出想法 !.. !
版权归原作者 墨鱼A 所有, 如有侵权,请联系我们删除。