如何从循环内的函数中中断Python的while循环
while True:
input = raw_input("enter input: ")
result = useInput(input)
def useInput(input):
if input == "exit":
break #return 0 / quit / etc.. i want to break the while loop from within this function
我知道我可以把“如果逻辑”直接放在while循环里面,但我想把它放在一个函数里。有没有办法在循环中调用的函数里中断while循环呢?
5 个回答
2
Python 有一个很酷的功能叫生成器,它可以让你轻松地创建可迭代的对象,方便在 for
循环中使用,这样可以让代码变得更简单。
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"
的代码直接写进生成器里,但如果你在多个地方都需要类似的功能,保持它的通用性可能更好。
另外,这也意味着你可以在 列表推导式 中使用它,这样也能轻松地生成结果列表。
补充:另外,我们也可以用 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: ")):
...
3
1. 抛出一个异常,这样你可以在循环外面处理它。
2. 返回一个标志,让调用者来捕捉并相应处理。需要注意的是,“在循环里直接用if逻辑”
,这是最推荐的做法。
1
我通常是这样做的:
def getInput():
while True:
yield raw_input("enter input: ")
for input in getInput():
if input == 'exit':
break
result = useInput(input)