我正在学习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语句,每次执行代码时都不应该运行它吗? 或者只返回一次,第一次被调用?
我只想在继续之前确保理解这个概念。 提前致谢
答案 0 :(得分:5)
不,您可以在任意数量的地方拥有尽可能多的return
语句:
def function():
... # do something
return 1
return
return [3, 4, 5]
return next(__import__('os').walk('.'))[-1:-1000000000:-1]
虽然重要的是要记住只有你的功能遇到的第一个return
将会计算,而其他任何可以成功的东西都不会被触及。
在上面的函数中,您将获得1
作为结果,而不是其他任何内容。
这种"控制流"这就是为什么你甚至可以做这样奇怪的事情 -
def foo():
return True
whatIsThisIdontEven__somethingWeird.jpg # would ordinarily throw RuntimeErrors anywhere else
print(foo())
# True
在您的情况下,它完全取决于您在运行时的代码流,但您最终仍然只遇到一个return
,因此只返回一次。
请注意,一个区别在于try-except-finally,return
子句中的final
总是胜出。
def function():
try:
... # do something
return 1
except SomeException:
... # do something else
finally:
return 2
在正常执行的情况下,您会在return 1
中遇到try
,但由于finally
子句的语义,您 仍然最终返回2.我相信这是唯一的例外。
另一方面,yield
是另一回事......
答案 1 :(得分:0)
一旦函数看到return语句,函数将结束并返回return语句中的变量。因此,一旦函数遇到return语句,函数的其余部分就不会被执行。
答案 2 :(得分:0)
return语句会导致函数退出并返回a 对其来电者的价值。一般来说,功能的关键在于接受 输入并返回一些内容。
请记住:函数按内存一次返回一个。
所以当你启动循环然后'if'条件成立时,函数返回并退出。
function MYMODULE_node_form_validate($form, &$form_state) {
$capacity = $form['capacity']['#value'];
$count = $form['count']['#value'];
if ($count > $capacity) {
form_set_error('title', 'Not possible');
}
}
如果你必须返回很多项,那么不要返回输出而不是将输出存储在列表中并最后返回该列表。
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