Python return在一个代码块中只能使用一次吗?
我正处于学习python的过程中,我不能在书中对一段代码掉以轻心:Python return在一个代码块中只能使用一次吗?,python,return,Python,Return,我正处于学习python的过程中,我不能在书中对一段代码掉以轻心: def find_value(List, value): for i in range(len(List)): if List[i] == value: return i return -1 我尝试运行代码,如果值在其中,它将返回索引,如果值不在其中,它将返回-1,但我不明白的是,因为“return-1”在for循环之外,if语句,它是否应该在每次执行代码时都运行?
def find_value(List, value):
for i in range(len(List)):
if List[i] == value:
return i
return -1
我尝试运行代码,如果值在其中,它将返回索引,如果值不在其中,它将返回-1,但我不明白的是,因为“return-1”在for循环之外,if语句,它是否应该在每次执行代码时都运行?
或者在第一次调用return时,它只被处理一次吗
我只是想确保在继续之前我理解了这个概念。
提前感谢不,您可以在任意位置使用任意多个语句:
def function():
... # do something
return 1
return
return [3, 4, 5]
return next(__import__('os').walk('.'))[-1:-1000000000:-1]
尽管需要记住的重要一点是,只有函数遇到的第一个返回值将被计算在内,其他任何成功的都不会被触及
在上面的函数中,您将得到1
作为结果,而没有其他结果
这种“控制流”就是为什么你甚至可以做这种奇怪的事情-
def foo():
return True
whatIsThisIdontEven__somethingWeird.jpg # would ordinarily throw RuntimeErrors anywhere else
print(foo())
# True
在您的情况下,这完全取决于运行时的代码流,但最终仍然会遇到一个return
,因此只返回一次
请注意,一个区别是try except finally,其中final
子句中的return
始终获胜
在正常执行的情况下,您将在try
中遇到return 1
,但是由于finally
子句的语义,您仍然会返回2。我相信这是唯一的例外
另一方面,现在是另一回事了……一旦函数看到return语句,函数将结束并返回return语句中的变量。因此,一旦函数遇到return语句,就不会执行函数的其余部分
return语句使函数退出并返回
向其调用者传递值。一般来说,功能的要点是接受
输入并返回一些东西
记住:函数通过内存一次返回一个
因此,当您启动循环,然后“if”条件变为true时,函数返回并退出
if List[i] == value:
return i
如果您必须返回许多项,那么不要返回输出,而是将输出存储在列表中,最后返回该列表
def find_value(List, value):
return_list=[]
for i in range(len(List)):
if List[i] == value:
return_list.append(i)
return return_list
在您的代码中,您需要两个返回,因此可以尝试如下条件返回:
def find_value(List, value):
return_list=[]
for i in range(len(List)):
if List[i] == value:
return_list.append(i)
if return_list:
return return_list
else:
return -1
print(find_value([1,2,3,4,5,6],4))
函数返回时结束。关于try/fail方面,try语句中的return
是否常见?从你的评论来看,这似乎是毫无意义的,而且(一般来说)只有在错误或你正在学习的情况下才会出现。还是有理由在一次尝试中使用返回
,即使最终
也有返回?
def find_value(List, value):
return_list=[]
for i in range(len(List)):
if List[i] == value:
return_list.append(i)
if return_list:
return return_list
else:
return -1
print(find_value([1,2,3,4,5,6],4))