|
发表于 2024-5-3 17:45:28
|
显示全部楼层
装饰器的作用是在不改变被修饰函数代码的前提下,为函数添加额外的功能。在第一段代码中,将装饰器放在了内部函数func上面,这样每次调用func时都会执行装饰器的功能,即延迟1秒钟。而将装饰器放在函数fib上面,则说明每次调用fib时都会执行装饰器的功能。但是由于装饰器中使用了内层函数func,而这个函数在装饰器外部并没有定义,所以会报错。
你可以把装饰器放在函数外部,然后再在函数上面使用装饰器。修改后的代码如下:
- import time
- def delay(func):
- def funa():
- time.sleep(1)
- func()
- return funa
-
- @delay
- def fib():
- back1, back2 = 0, 1
- def func():
- nonlocal back1, back2
- back1, back2 = back2, back1 + back2
- print(back1, end=' ')
- return func
-
- def get_fib(n):
- f = fib()
- for i in range(n):
- f()
- n = int(input("请输入需要获取的斐波那契数:"))
- get_fib(n)
复制代码
现在,每次调用fib函数时,都会先执行delay装饰器中的代码,延迟1秒钟,然后再执行函数fib中的代码。这样就实现了给fib函数添加延迟执行的功能。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|