装饰器通俗理解 (有错误)

程序员成长之旅 · 程序员成长之旅/Python学习 · 288 字

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))