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] == n
为 True
时,计数将被 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 count
或 return -1
.
函数只能调用 return
一次。正如评论中指出的,这个 returns 从函数到调用者。因此,其余代码不会 运行。
如果您想 return 所有相关索引,您可以:
跟踪列表中的索引,只是 return 函数末尾的列表
查看生成器并使用 yield
关键字
你关心的叫"Flow Control".
For 循环是一种流程控制形式,使您能够进行重复。
If/(then)/Else 是做决定的另一种形式。
python 文档 (chapter 4) 对此有很好的介绍。
这些语句可以跳出循环:
return
语句。
break
语句。
在 运行 时,如果循环中发生未处理的异常,也可以中断循环。
使用continue
语句实现相关流程。
如果您中途进入循环迭代,continue
将跳过迭代的其余部分并继续进行下一个迭代。
在您的特定示例中,if
语句出现在函数上下文中的循环上下文中。 return
语句不仅使我们跳出循环,而且跳出函数并设置函数返回的值。
return 中止函数内的所有进一步活动,return 将控制权交给调用者。 (正如 juanchopanza 所说)
顺便说一句,您不需要保留两个单独的变量 count
和 x
。他们是多余的。改为这样做:
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
我认为无论循环条件如何,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] == n
为 True
时,计数将被 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 count
或 return -1
.
函数只能调用 return
一次。正如评论中指出的,这个 returns 从函数到调用者。因此,其余代码不会 运行。
如果您想 return 所有相关索引,您可以:
跟踪列表中的索引,只是 return 函数末尾的列表
查看生成器并使用
yield
关键字
你关心的叫"Flow Control".
For 循环是一种流程控制形式,使您能够进行重复。 If/(then)/Else 是做决定的另一种形式。
python 文档 (chapter 4) 对此有很好的介绍。
这些语句可以跳出循环:
return
语句。break
语句。
在 运行 时,如果循环中发生未处理的异常,也可以中断循环。
使用continue
语句实现相关流程。
如果您中途进入循环迭代,continue
将跳过迭代的其余部分并继续进行下一个迭代。
在您的特定示例中,if
语句出现在函数上下文中的循环上下文中。 return
语句不仅使我们跳出循环,而且跳出函数并设置函数返回的值。
return 中止函数内的所有进一步活动,return 将控制权交给调用者。 (正如 juanchopanza 所说)
顺便说一句,您不需要保留两个单独的变量 count
和 x
。他们是多余的。改为这样做:
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