展开全部
装饰器函du数参数要传函数,zhi而不是字符串。
装饰dao器函数内特点:
1,参数为函数对象
2,使用内部函容数
3,返回函数对象
在你的代码中:
装饰器函数是arg_func(sex)
内部函数是func1()
被装饰函数是man()和woman()
所以代码要改成:
def arg_func(sex):
def func1():
sex()
if(sex.__name__=='man'):
print("you can 't")
if(sex.__name__=='woman'):
print("you can")
return func1
@arg_func
def man():
print('good good study')
@arg_func
def woman():
print('good good study')
man()
woman()
PS:装饰器就是为了简化代码,增加可读性,方便团队开发,在不修改原函数代码的前提下,通过封装修改功能,而@修饰就是为了通过原函数名调用时,不直接执行原函数,而是把原函数传递到装饰器函数,通过内部函数(闭包)来调用原函数。这样好处,就是统一调用方式。