不带参数的装饰器:
def outwrapper(func): #func是被装饰函数形参
city="深圳"
def wrapper(*args,**kwargs): #传入被装饰函数的参数。没有则忽略
func(*args,**kwargs)
print("you belong to city: %s"%(city))
return wrapper
@outwrapper #print_name=outwrapper(print_name) --> print_name=wrapper --> print_name(name)=wrapper(name)
def print_name(name):
print("your name is: %s"%(name))
if __name__ == '__main__':
print_name("jan")
带参数的装饰器:
def deco_city(city): #传入装饰器的参数
def outwrapper(func): #func被装饰函数名形参
def wrapper(*args,**kwargs): #传入被装饰函数的参数
func(*args,**kwargs)
print("you belong to city: %s"%(city))
return wrapper
return outwrapper
@deco_city("深圳")
def print_name(name):
print("your name is: %s"%(name))
if __name__ == '__main__':
print_name("jan")