|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我先定义一个闭包
- def logger(func):
- def call_func():
- print("----------")
- func()
- print("----------")
- return call_func
复制代码
再给一个含参函数加上该闭包的装饰器
- @logger
- def sayhi(name):
- print("hi,{}".format(name))
复制代码
然后函数sayhi()就没法用了
- sayhi("小甲鱼")
- Traceback (most recent call last):
- File "<pyshell#38>", line 1, in <module>
- sayhi("小甲鱼")
- TypeError: logger.<locals>.call_func() takes 0 positional arguments but 1 was given
复制代码
求帮助
一个函数在使用装饰器后会被替换成装饰器的返回值,
而装饰器的返回值 call_func 不接受任何参数,故而你给 sayhi 传参会报错,
所以就是要让 call_func 接收跟 sayhi 的参数个数一样的形参,并在 call_func 调用 sayhi 的时候把参数传递给 sayhi
故对你的代码修改如下:
- def logger(func):
- def call_func(name): # 改了这里
- print("----------")
- func(name) # 改了这里
- print("----------")
- return call_func
- @logger
- def sayhi(name):
- print("hi,{}".format(name))
- sayhi("小甲鱼")
复制代码
|
|