return 函数如何在循环和过程中工作?

How does the return function work within a loop and procedure?

我认为无论循环条件如何,for 循环都会 运行 遍历列表中的所有元素。
对于下面的问题-我希望打印输出为 6,-1,
p[count]==n 的最后一个位置,然后是循环结束后我的 return 语句。

if p[count]==n 找到匹配时,循环和过程是否保持 运行ning 超过我的 return 函数?
有人对它的工作原理有很好的解释吗?

def find_element(p,n):
    count=0
    for x in p:
        if p[count]==n:
            return count
        count=count+1
    return '-1'

print find_element(['1', '2', '1', '2', '2', '1', '2'],'2')

当执行一个函数时,遇到的第一个return 语句将结束该函数,并且给return 语句的表达式的结果将返回给调用者。在这种情况下,当 p[count] == nTrue 时,计数将被 returned。如果 for x in p: 循环耗尽而没有找到合适的元素,该函数只会 return -1。

话虽如此,但是您的循环并不完全按照函数建议的方式运行。如果您希望找到具有值 n 的每个索引的列表,您将想要这样的东西:

def find_element(p,n):
    return [i for i,x in enumerate(p) if x == n]

print find_element(['1', '2', '1', '2', '2', '1', '2'],'2')
#[1, 3, 4, 6]

你的第一个问题:"When if p[count] == n finds a match, does the loop and procedure stop running?"

答案是否定的。程序在遇到任何 return 语句时退出 find_element 函数。在您的情况下,return countreturn -1.

函数只能调用 return 一次。正如评论中指出的,这个 returns 从函数到调用者。因此,其余代码不会 运行。

如果您想 return 所有相关索引,您可以:

  1. 跟踪列表中的索引,只是 return 函数末尾的列表

  2. 查看生成器并使用 yield 关键字

你关心的叫"Flow Control".

For 循环是一种流程控制形式,使您能够进行重复。 If/(then)/Else 是做决定的另一种形式。

python 文档 (chapter 4) 对此有很好的介绍。

这些语句可以跳出循环:

  1. return 语句。
  2. break 语句。

在 运行 时,如果循环中发生未处理的异常,也可以中断循环。

使用continue语句实现相关流程。 如果您中途进入循环迭代,continue 将跳过迭代的其余部分并继续进行下一个迭代。

在您的特定示例中,if 语句出现在函数上下文中的循环上下文中。 return 语句不仅使我们跳出循环,而且跳出函数并设置函数返回的值。

return 中止函数内的所有进一步活动,return 将控制权交给调用者。 (正如 juanchopanza 所说)

顺便说一句,您不需要保留两个单独的变量 countx。他们是多余的。改为这样做:

def find_element(p,n):
    try:
        return p.index(n)
    except ValueError:
        return -1

有效:

>>> print find_element(['1', '2', '1', '2', '2', '1', '2'],'2')
1
>>> print find_element(['1', '2', '1', '2', '2', '1', '2'],'4')
-1

你的 for 循环试图做的是检查 p[count] 是否等于 n,如果是,停止并退出循环,你的函数结束并且 returns count 的当前值。但是如果它没有找到匹配项,循环就会退出并且你的函数将 return -1.

此外,您 could/should 使用 count += 1 来增加计数。

假设您下班后通常 运行 绕赛道 10 圈,但您的老板在第 4 圈后打电话给您并说 "we have an emergency and need you to return to work right away" 那么 return 的命令将覆盖命令完成圈数(至少如果你想成为一名好员工)。 Return——不是 if 语句本身——是导致循环结束的原因。

在 Python 中,与所有(大多数)语言一样,return 执行 return(原文如此)值并终止函数(或过程,正如它在问题;但是函数,或者 calleble 更正确)。

但是,

Python 可以选择 将它们分开 。通过使用“yield”:这将 return 值,但(有点)继续循环。 注意:函数(或 generator/iterator)必须在循环中调用,以 return(产生)每个值,一个接一个。

这有点高级,所以我留给 reader 查找文档和好的示例

最后一句话:使用了counter,如图所示不是pythonic!请改用 enumerate 助手。

def find_element(p,n):
    for count, elm in enumerate(p):  # p is a list or sequence 
        if elm == n                       # maybe 'is' is better as '=='
            return count
    return -1                               # however, returning None is  more Pythonic