Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python return在一个代码块中只能使用一次吗?_Python_Return - Fatal编程技术网

Python return在一个代码块中只能使用一次吗?

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语句,它是否应该在每次执行代码时都运行?

我正处于学习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语句,它是否应该在每次执行代码时都运行? 或者在第一次调用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))