装饰器:在不改变函数的定义和调用的前提下,给函数扩展功能,这就是装饰器函数,其实就是闭包。
以下例子仅供参考。
def w1(func):
def inner():
print("正在执行...") # 拓展功能
func() # 执行基础函数的功能
return inner
# 被装饰的函数
@w1 # 本质 f1 = w1(f1)
def f1():
"""功能"""
print("基础函数: 功能")
1. 外部函数的参数func 指向的是基础函数的内存空间 func------>f1(基础函数的内存空间)
2. 外部函数执行后的返回值inner(内部函数的内存空间)赋值给f1 f1-----> inner(内部函数的内存空间)
----------------------------------------------------------------------------------------------------------------------------------------------------
""" 万能装饰器 """
def w1(func):
def inner(*args,**kwargs):
print("正在执行某功能...")
result=func(*args,**kwargs) # 执行被装饰的函数 func--> 被装饰的函数内存空间
return result
return inner
@w1
def f1(*args,**kwargs): # 被装饰的函数
print("我是被装饰的函数...功能")
print(args)
print(kwargs)
return "haha"
# 执行业务
print("----无参 无返回值---")
f1() # f1--->inner
输出:
----无参 无返回值---
正在执行某功能...
我是被装饰的函数...功能
()
{}
------------------------------------------
print("----有参 无返回值---")
f1(100) # f1--->inner
输出:
----有参 无返回值---
正在执行某功能...
我是被装饰的函数...功能
(100,)
{}
-------------------------------------------
print("----无参 有返回值---")
result=f1() # f1--->inner
print(result)
输出:
----无参 有返回值---
正在执行某功能...
我是被装饰的函数...功能
()
{}
hello world
-----------------------------------------
print("----有参 有返回值---")
result=f1(20,age=30) # f1--->inner
print(result)
输出:
----有参 有返回值---
正在执行某功能...
我是被装饰的函数...功能
(20,)
{'age': 30}
hello world