def welcome(func): # 参数是一个函数
def inner_f():
"""这是装饰器中的welcome函数"""
print('welcome'.center(40,'~'))
func()
return inner_f # 返回值是另外一个函数,使用该返回的函数替代做为参数的函数python
@welcome # 说明底下定义的函数被welcome所装饰,使用该返回的函数替代做为参数的函数
def name():
"""这个是name函数"""
print('name is toto')编程
name() # 调用welcome 函数闭包
一、 被装饰的函数存在参数的时候编程语言
在构建装饰器的时候,做为返回值的函数是用来替代做为参数的函数的,因此这两个函数所须要的参数必须一致。就时说再定义函数装饰器的时候,指定做为参数的函数能够因为任意个参数以及做为返回值的函数能够右任意个参数,这样就能保证再实际使用的时候不论被装饰的函数须要几个参数,都能使用该装饰器。
def welcome(func): # 参数是一个函数
def inner_f(*args,*kwargs): # 指定返回的函数能够有任意个参数
"""这是装饰器中的welcome函数"""
print('welcome'.center(40,'~'))
func(args,**kwargs) # 做为参数的函数也有任意个参数
return inner_f # 返回值是另外一个函数ide
@welcome # 能够装饰一个参数的函数
def name(name):
"""这个是name函数"""
print('name is %s' %name)函数
@welcome # 也能够装饰两个参数的函数
def stuinfo(name,age):
print('name is %s ,age is %d' %(name,age))ui
name('toto')
stuinfo('lala',16)对象