闭包、装饰器
一、闭包
构成条件:
在函数嵌套(函数里面再定义函数)的前提下
内部函数使用了外部函数的变量(还包括外部函数的参数)
外部函数返回了内部函数
闭包的作用:
闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁。
# 定义一个外部函数
def func_out(num1):
# 定义一个内部函数
def func_inner(num2):
# 内部函数使用了外部函数的变量(num1)
result = num1 + num2
print("结果是:", result)
# 外部函数返回了内部函数,这里返回的内部函数就是闭包
return func_inner
# 创建闭包实例
f = func_out(1)
# 执行闭包
f(2)
f(3)
结果是: 3
结果是: 4
二、装饰器的定义
就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数。
语法糖用法: @装饰器名称
示例代码:
# 添加一个登录验证的功能
def check(fn):
print("装饰器函数执行了")
def inner():
print("请先登录....")
fn()
return inner
# 使用语法糖方式来装饰函数
@check
def comment():
print("发表评论")
comment()
1.通用装饰器的语法格式:
def logging(fn):
def inner(*args, **kwargs):
print("--正在努力计算--")
result = fn(*args, **kwargs)
return result
return inner
2.带有参数的装饰器介绍
def decorator(fn):
print('第1执行')
def inner(num1, num2):
print('第2执行')
result = fn(num1, num2)
print('第5执行')
return result
return inner
@decorator
def add(a, b):
print('第3执行')
result = a + b
print('第4执行')
return result
result = add(1, 3)
print(result)
结果:
第1执行
第2执行
第3执行
第4执行
第5执行
4
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:闭包、装饰器
本文作者:伟生
发布时间:2020-02-07, 20:29:06
最后更新:2020-02-07, 20:29:06
原始链接:http://yoursite.com/2020/02/07/basic_05_other/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。