赞
踩
在python中有一个特殊的符号 @ ,使用此符号的时候表示用后边的函数作为装饰器来装饰下面的函数,并改变下面函数的引用。
在装饰器中大至分为两种,一种是直接使用函数引用的装饰器,与直接使用函数的装饰器。
不管使用上面两种的哪一种装饰器,都遵循,只要代码读取到@符号并已经将一个函数引用传递给该修饰器的时候,则首先进行最外层函数的运行。
def w1(func1):
print("---正在装饰1---")
def inner1():
print("--正在验证权限1---")
func1()
return inner1
@w1
def f1():
print("---f1---")
f1()
其输出结果为:
---正在装饰1---
在使用直接使用函数引用的装饰器的时候,需要在@符号的时候,后面直接跟函数名而不加括号与参数: @func 。
在使用的时候,读取到@符号的时候将会将被修饰的函数的引用作为第一个参数传递到修饰函数中,并运行第一层函数,将被修饰函数的函数名变量等于第一层函数的返回值。
如:
def w1(func1):
print("---正在装饰1---")
def inner1():
print("--正在验证权限1---")
func1()
return inner1
@w1
def f1():
print("---f1---")
f1()
其输出结果为
---正在装饰1---
--正在验证权限1---
---f1---
其上边的代码相当于下面的代码:
def w1(func1): print("---正在装饰1---") def inner1(): print("--正在验证权限1---") func1() return inner1 #@w1 def f1(): print("---f1---") f1 = w1(f1) f1()
输出结果是一样的。
代码解读:首先将原来的f1函数的引用作为参数func1的值传递进去,此时func1=f1,在将最外层函数的返回值(inner1的引用),在赋值给f1。此时运行f1时相当于运行inner1函数。
对于装饰无参数的函数与上边直接使用函数引用装饰器的装饰器的方法是相同的,在此不再做介绍与解释。
对于装饰有参数的函数与装饰无参数的时候使用与定于的时候是有所区别的。
如
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。