def countdown(n):
while n > 0:
return n
n -= 1
n -= 1永远不会到达。实际上,while循环只会迭代一次,你的函数只返回n。
您想改为使用yield。
但是,它仍然不起作用。会发生什么情况是,您将在呼叫countdown前暂停2秒,但不会在每次迭代之间进行。
在该使用情况我甚至不会用一个装饰,只是默认参数:
def countdown(n, wait=None):
while n > 0:
if wait:
time.sleep(wait)
yield n
n -= 1
# no sleep between iterations
for i in countdown(5):
print(i)
# 2 seconds sleep between every iteration
for i in countdown(5, wait=2):
print(i)
编辑如果你坚持使用装饰。请注意,这是次优(并没有多大意义),我不会在生产代码中使用它:
import time
def sleep_dec(function):
def wrapper(*args):
return function(*args, wait=2)
return wrapper
@sleep_dec
# it might make more sense to accept **kwargs instead of wait=None
def countdown(n, wait=None):
while n > 0:
if wait:
time.sleep(wait)
yield n
n -= 1
# 2 seconds sleep between each iteration
for i in countdown(5):
print(i)