[英]How does the return function work within a loop and procedure?
我认为无论循环的条件如何,for循环都会遍历列表中的所有元素。
对于以下问题-我希望打印输出为6,-1,
最后一个位置,其中p[count]==n
,然后是循环结束后的return语句。
if p[count]==n
找到匹配项,则循环和过程是否继续运行超过我的返回函数?
有人对此工作原理有很好的解释吗?
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
,将返回计数。 如果for x in p:
循环中的for x in p:
耗尽,而找不到合适的元素,则该函数仅返回-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]
函数只能调用return
一次。 如注释中所指出的,这将从函数返回到调用者。 因此,其余代码不会运行。
如果要返回所有相关索引,则可以:
跟踪列表中的索引,然后在函数末尾返回列表
查看生成器并使用yield
关键字
假设您下班后通常在赛道上跑10圈,但老板在第4圈后打电话给您,并说“我们有紧急情况,需要您立即返回工作状态”,那么当务之急是要超越要务来完成每一圈(至少如果您想成为一名好员工)。 Return-不是if语句本身-是导致循环结束的原因。
您的第一个问题:“ if p[count] == n
找到匹配项,则循环和过程是否停止运行?”
答案是不。 程序在遇到任何return
语句时退出find_element
函数。 在您的情况下,要么return count
,要么return -1
。
您所关心的称为“流控制”。
For循环是一种流控制形式,可让您进行重复。 If /(then)/ Else是进行决策的另一种形式。
python文档(第4章)对此做了很好的介绍。
这些语句可以打破循环:
return
语句。 break
语句。 在运行时,如果其中发生未处理的异常,则循环也可能被破坏。
使用continue
语句实现相关流程。 如果你是兼职的方式进入循环迭代, continue
将跳过迭代的其余部分,并继续下一个。
在您的特定示例中, if
语句出现在函数上下文内的循环上下文内。 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
,如果是,则停止并退出循环,函数结束并返回count
的当前值。 但是,如果找不到匹配项,则循环将退出,并且您的函数将返回-1
。
另外,您可以/应该使用count += 1
来增加count。
在Python中,就像所有(大多数)语言一样,return确实返回值(sic)并终止函数(或过程,如在问题中所称;但是函数或calleble更为正确)。
但是,Python确实可以选择将它们分开 。 通过使用' yield ':将返回值,但是(某种)继续循环。 注意:必须在循环中调用函数(或生成器/迭代器),以逐个返回(屈服)每个值。
这有点高级,因此我留给读者查找文档和好的示例
最后一句话:使用计数呃,如不符合Python! 请改用枚举助手。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.