|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- import time
- def fib():
- back1, back2 = 0, 1
- def func():
- nonlocal back1, back2
- back1, back2 = back2, back1 + back2
- print(back1, end=' ')
- return func
- def sleeptime(fun):
- def call_time():
- start = time.time()
- fun()
- time.sleep(2000)
- end = time.time()
- print(f'{end-start}')
- return call_time
- @sleeptime
- def get_fib(n):
- f = fib()
- for i in range(n):
- f()
- n = int(input("请输入需要获取的斐波那契数:"))
- get_fib(n)
复制代码- 请输入需要获取的斐波那契数:5
- Traceback (most recent call last):
- File "D:\python\python_test\装饰器.py", line 42, in <module>
- get_fib(n)
- TypeError: call_func() takes 0 positional arguments but 1 was given
复制代码
这个错误是因为 `call_time` 函数在调用 `fun()` 时,没有传入任何参数,但是 `get_fib()` 调用了 `call_time` 并传入了一个参数 `n`。可以通过给 `call_time` 函数添加一个 `*args, **kwargs` 参数来接受传入的参数,并将其传递给 `fun()` 函数:
- def sleeptime(fun):
- def call_time(*args, **kwargs):
- start = time.time()
- fun(*args, **kwargs)
- time.sleep(2)
- end = time.time()
- print(f'{end-start}')
- return call_time
复制代码
这样修改后可以正常运行,并且会在调用完 `fib()` 函数后停顿 2 秒钟。
有用请设置最佳答案
|
|