我試圖在運行時影響生成器。該代碼使用全局,我要求更pythonic方式達到相同的結果。如何在不使用全局變量的情況下使用python生成器:時間示例
本示例打印出時間範圍內的小時和分鐘。從13:15到15:45的範圍應該被跳過(這是一個例子,在現實世界中,跳過某些值的決定是不固定的)
我可以通過globalskiptime給發生器一些更好的方法?
import datetime
globalskiptime = None
def mynexttime(mystart=None):
# returns 15 30 45 59 minute for each hour
for myhour in range(0, 24):
for myminute in range(15, 61, 15):
if mystart is not None:
if datetime.time(myhour, myminute
if myminute < 60 else 59) < mystart:
continue
if globalskiptime is not None:
if datetime.time(myhour, myminute
if myminute < 60 else 59) < globalskiptime:
continue
yield myhour, myminute if myminute < 60 else 59
mystarttime = datetime.time(10, 45)
print type(mystarttime) is datetime.time
for h, m in mynexttime(mystarttime):
print(str(h) + " " + str(m))
if h == 13:
print('skip until 15:45')
globalskiptime = datetime.time(15, 45)
文檔的這一部分可能會幫助您:值傳遞到發電機(https://docs.python.org/2/howto/functional。 html#把值傳遞給生成器) –
@VincentSavard - '.send()'方法似乎可以完成我所要求的功能。 – 576i