繁体   English   中英

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

[英]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] == nTrue ,将返回计数。 如果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一次。 如注释中所指出的,这将从函数返回到调用者。 因此,其余代码不会运行。

如果要返回所有相关索引,则可以:

  1. 跟踪列表中的索引,然后在函数末尾返回列表

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

假设您下班后通常在赛道上跑10圈,但老板在第4圈后打电话给您,并说“我们有紧急情况,需要您立即返回工作状态”,那么当务之急是要超越要务来完成每一圈(至少如果您想成为一名好员工)。 Return-不是if语句本身-是导致循环结束的原因。

您的第一个问题:“ if p[count] == n找到匹配项,则循环和过程是否停止运行?”

答案是不。 程序在遇到任何return语句时退出find_element函数。 在您的情况下,要么return count ,要么return -1

您所关心的称为“流控制”。

For循环是一种流控制形式,可让您进行重复。 If /(then)/ Else是进行决策的另一种形式。

python文档(第4章)对此做了很好的介绍。

这些语句可以打破循环:

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

在运行时,如果其中发生未处理的异常,则循环也可能被破坏。

使用continue语句实现相关流程。 如果你是兼职的方式进入循环迭代, continue将跳过迭代的其余部分,并继续下一个。

在您的特定示例中, if语句出现在函数上下文内的循环上下文内。 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 ,如果是,则停止并退出循环,函数结束并返回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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM