我在youtube上观看Raymond Hettinger的 python 讲座.他展示了退出循环的正确方法:
def find(seq, target):
for i, value in enumerate(seq):
if value == target:
break
else:
return -1
return i
Run Code Online (Sandbox Code Playgroud)
我不明白为什么要烦恼其他声明,而不仅仅是:
def find(seq, target):
for i, value in enumerate(seq):
if value == target:
return i
return -1
Run Code Online (Sandbox Code Playgroud)
我是否遗漏了某些内容,或者出于某种原因有时添加其他/ break语句也是个好主意?
简明回答:一旦你使用了返回,你就失去了功能.Break表示代码继续运行,您可以添加更多内容.所以你在你的例子中是正确的,但是如果你想要做更多的事情,如果没有发现什么怎么办:
提出错误:
def find(seq, target):
for i, value in enumerate(seq):
if value == target:
break
else:
raise ValueError("Nothing found in {}".format(seq))
return i
find("hello","a")
Run Code Online (Sandbox Code Playgroud)
或写入文件:
def find(seq, target):
for i, value in enumerate(seq):
if value == target:
break
else:
with open("output.txt", "w") as f:
f.write("Nothing found :(((")
return i
find("hello","a")
Run Code Online (Sandbox Code Playgroud)
进一步发展(@Joe Iddon):
你可能还想继续下去:
def find(seq, target):
for i, value in enumerate(seq):
if value == target:
break
else:
return "Nothing found"
# calculate more things
a = [1,2,3]
if i in a:
return i
else:
return "Not in a"
find("hello","a")
Run Code Online (Sandbox Code Playgroud)
因此,对于这个小目的,没有必要.但是如果你正在构建一些东西,那么else子句可能很有用.