Python有發電機中一個很酷的功能 - 這些讓你輕鬆製作與一個for
循環使用iterables,可以簡化這種代碼。
def input_until(message, func):
"""Take raw input from the user (asking with the given message), until
when func is applied it returns True."""
while True:
value = raw_input(message)
if func(value):
return
else:
yield value
for value in input_until("enter input: ", lambda x: x == "exit"):
...
的for
循環將循環播放,直到停止迭代器和迭代器我們做出停止當用戶輸入"exit"
。請注意,爲簡單起見,我將這一點推廣了一下,您可以將對照"exit"
的支票硬編碼到生成器中,但如果您在少數地方需要類似的行爲,則可能值得保留它。
請注意,這也意味着您可以在list comprehension內使用它,因此也很容易建立結果列表。
編輯:另外,我們可以用itertools
建設這件事:
def call_repeatedly(func, *args, **kwargs):
while True:
yield func(*args, **kwargs)
for value in itertools.takewhile(lambda x: x != "exit",
call_repeatedly(raw_input, "enter input: ")):
...
這只是概念驗證,因爲邏輯是你想要做什麼很令人費解? – Hoopdady
這個想法是,函數應該處理/處理/格式化輸入,然後返回結果,但某些關鍵字(如「退出」或「通過」)我需要通過某種方式影響while循環調用「break」或「continue 」。從審美角度而言,我不喜歡在循環中直接使用所有這些例外/關鍵字的想法。但我對這一切都很陌生,所以也許我只是不知道這種「適當」的風格。 – alnafie