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

时间:2015-09-02 19:49:14

标签: python if-statement for-loop procedure

我认为for循环会遍历列表中的所有元素,而不管循环的条件如何 对于下面的问题 - 我希望打印输出为6,-1,
SELECT DATEDIFF('2014-10-30','2014-12-29') AS DiffDate 的最后一个位置,然后是循环结束后的return语句。

p[count]==n找到匹配时,循环和过程是否继续通过我的返回函数?
有人对这是如何工作有一个很好的解释吗?

if p[count]==n

8 个答案:

答案 0 :(得分:2)

执行函数时,遇到的第一个return语句将结束该函数,并且返回语句的表达式结果将返回给调用者。在这种情况下,当p[count] == nTrue时,将返回计数。如果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]

答案 1 :(得分:1)

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

如果您想要返回所有相关指数,您可以:

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

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

答案 2 :(得分:1)

假设您下班后通常在赛道上跑了10圈但是老板在第4圈后给您打电话说“我们有紧急情况需要您返回立即工作”然后必要返回将覆盖完成圈数的命令(至少如果你想成为一名优秀的员工)。返回 - 不是if语句本身 - 是导致循环结束的原因。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

您关注的是“流量控制”。

For循环是一种流控制形式,可让您重复进行。 如果/(然后)/ Else是另一种做决定的形式。

python docs (chapter 4)对此有了很好的介绍。

这些陈述可以突破循环:

  1. return声明。
  2. break声明。
  3. 在运行时,如果在其中发生未处理的异常,也可以破坏循环。

    使用continue语句实现相关流程。 如果你是循环迭代的一部分,continue将跳过剩下的迭代并继续下一个迭代。

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

答案 5 :(得分:0)

返回将中止函数中的所有其他活动,并将控制权返回给调用者。 (正如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

答案 6 :(得分:0)

你的for循环试图检查p[count]是否等于n,如果是,则停止并退出循环,你的函数结束并返回{{1}的当前值}。但如果找不到匹配项,则无论如何都会退出循环,并且您的函数将返回count

此外,您可以/应该使用-1来增加计数。

答案 7 :(得分:0)

在Python中,与所有(大多数)语言一样,返回确实返回(sic)值并终止函数(或过程,就像在问题中调用的那样;但是函数,或 calleble 更正确)。

然而,

Python确实有分开它们的选项。使用' yield ':将返回值,但(种类)继续循环。 注意:函数(或生成器/迭代器)必须在循环中调用,以逐个返回(yield)每个值。

这有点高级,所以我留给读者查找文档和好的例子

最后评论:使用计数呃,如图所示不是 pythonic !请改用enumerate帮助器。

rm