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)
感謝您的等待方法......但我特別尋找裝飾方法。 – purple
@purple查看我的更新回答 – DeepSpace
在這個例子中,裝飾者看起來像過度殺傷力。但它的工作原理。 – purple