返回只能在一段代码中使用一次?

时间:2018-03-26 22:44:03

标签: 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语句,每次执行代码时都不应该运行它吗? 或者只返回一次,第一次被调用?

我只想在继续之前确保理解这个概念。 提前致谢

3 个答案:

答案 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