Python课后习题加延时装饰器问题
import timedef delay(func):
def inner():
start=time.time()
func()
stop=time.time()
time.sleep(1-(stop-start))
return inner
#以下是题目给定内容
#为什么延时装饰器加在这里不行呢?
def fib():
back1, back2 = 0, 1
@delay#添加延时装饰器
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)
import time
def delay(func):
def inner():
start = time.time()
func()
stop = time.time()
time.sleep(1-(stop-start))
return inner
def fib():
back1, back2 = 0, 1
def func():
nonlocal back1, back2
back1, back2 = back2, back1 + back2
print(back1, end=' ')
return delay(func)
def get_fib(n):
f = fib()
for i in range(n):
f()
n = int(input(""))
get_fib(n) 如果装饰器加在 fib 的话,那么 fib 就会成为装饰器中的 func,也就是实现主要功能的函数
但是 fib 这个函数只是返回 func 而已,而主要功能在 func 那里,他也没有调用 func ,
同时 fib 会成为 inner 的返回值,因为 inner没有返回值,所以返回值为 None,
所以在 f = fib() 中 f 就成了 None,所以后面调用 f 就报错了,因为 None 是不可调用的
页:
[1]