装饰器通俗理解 (有错误)
import functools def user_login_required(view_func): # Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。 @functools.wraps(view_func) def verify_token(*args, **kwargs): # 函数内的函数会自动执行 print(args) print(kwargs) return view_func(*args, **kwargs) return verify_token @user_login_required def print_hello(*args, **kwargs): print("hello") if name == 'main': print_hello(1,2,3) #调用了print_hello 实际上就是调用了user_login_required(print_hello(1,2,3))
17
1 import
functools 2 def
user_login_required ( view_func ): 3
Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。
4
@functools . wraps ( view_func ) 5
def
verify_token ( * args , ** kwargs ):
函数内的函数会自动执行
6
print ( args ) 7
print ( kwargs ) 8
return
view_func ( * args , ** kwargs ) 9
return
verify_token 10 11 12 13 @user_login_required 14 def
print_hello ( * args , ** kwargs ): 15
print ( "hello" ) 16 if
name
==
'main' : 17
print_hello ( 1 , 2 , 3 ) #调用了print_hello 实际上就是调用了user_login_required(print_hello(1,2,3))