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")
或写入文件:
^{pr2}$
进一步发展(@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")
def find1(seq, target):
for i, value in enumerate(seq):
if value == target:
break
else:
return -1
i = some_preprocessing(i)
func(i)
i = final_adjustment(i)
logging_result(i)
return i
如果没有else-处理代码将出现在搜索循环中。代码也向右缩进了很多。在
^{pr2}$
另外,使用标志的代码(Hettinger先生开始使用的例子)也不如:
def find2(seq, target):
found = False
for i, value in enumerate(seq):
if value == target:
found = True
break
if not found:
return -1
i = some_preprocessing(i)
func(i)
i = final_adjustment(i)
logging_result(i)
return i
简明回答:一旦使用return,您将无法使用您的函数。Break意味着代码继续运行,您可以添加更多内容。所以你的例子是对的,但如果你想做更多的事情,如果什么都没有发现:
引发错误:
或写入文件:
^{pr2}$进一步发展(@Joe Iddon):
你也许还想继续下去:
所以为了这个小小的目的,这是没有必要的。但是,如果您要在此基础上构建一些东西,else子句可能会有用。在
我觉得这个例子太短了,“为什么要麻烦?”在这种情况下,这个问题完全合乎逻辑。在
然而,如果要进一步处理发现的值,差异将变得明显(但也需要更多的呈现时间)
Python道:
如果没有
^{pr2}$else
-处理代码将出现在搜索循环中。代码也向右缩进了很多。在另外,使用标志的代码(Hettinger先生开始使用的例子)也不如:
相关问题 更多 >
编程相关推荐