【问题标题】:Return statements acting weird in "if" statements in Python返回语句在 Python 中的“if”语句中表现怪异
【发布时间】:2016-11-18 02:56:21
【问题描述】:

我的问题是关于这个 statement 我在网上读到的内容类似于“'if 语句'之后的行并且与“if 语句”处于相同的缩进将始终运行,不管‘if 语句’是真还是假。”我将在下面使用我的示例来展示这一点。

所以我有这个程序,它接受两个数字作为输入并返回两个输入中较大的一个。

因此,第一个示例中的第 4 行和第 5 行代码,与“if a>b:”处于同一缩进级别,应始终按照上述语句运行。

示例 #1

def bigger(a,b):
    if a>b:
        x = "the first number is bigger"
    x = "the second number is bigger"
    return x
print bigger(9,7)

Python 打印“第二个数字更大”,因此代码按照我在开头编写的原始语句运行。即使那是错误的,因为 9>7.

但我遇到困惑的地方是在以下示例中使用了 return 语句:

示例 #2

def bigger(a,b):
    if a>b:
        return "the first number is bigger"
    return "the second number is bigger"
print bigger(9,7)

这一次,Python 打印“第一个数字更大”。这是真的,因为 9>7

我的困惑:第二个示例中的第 4 行代码“返回“第二个数字更大””不应该总是运行,因为它与“if 语句”处于相同的缩进级别,就像我们看到的那样在示例 #1 中?

这两个代码示例似乎相互矛盾,因为在示例 #1 中,Python 识别出“第二个数字更大”行并打印该行,但在示例 #2 中,Python 忽略了“第二个数字更大”行并打印另一个“第一个数字更大”行。

我试图尽可能清楚地说明这一点。谢谢

【问题讨论】:

  • 这没什么奇怪的。按照设计,在 Python 中立即从函数返回。
  • @paisanco 谢谢。我从来不知道退货会立即返回。我以为它不会立即返回,所以我当然感到困惑。你知道的越多!

标签: python if-statement return


【解决方案1】:

我的困惑:第二个示例中的第 4 行代码不应该吗? "return "第二个数字更大"",总是运行,因为它在 与“if 语句”相同的缩进级别,就像我们在 示例 #1?

这是因为当你有一个 return 语句时函数执行中断:

def bigger(a,b):
    if a>b:
        return "the first number is bigger" # function execution breaks here!!!
    return "the second number is bigger"
print bigger(9,7)

【讨论】:

    【解决方案2】:

    您可能想了解一下函数和返回的含义。 简而言之,如果执行 return 语句,则函数超出范围并且不会在其后运行任何内容。

    【讨论】:

      【解决方案3】:

      在第一个示例中,首先比较两个值97,然后x = the first number is bigger,然后分配x= the second number is bigger 并返回x。这就是你看到这条线的原因。

      在第二个例子中,它也比较两个值,但它立即返回 x,所以它不会进入下一行。

      【讨论】:

        【解决方案4】:

        我认为“您阅读的声明”有点过于简单化。只有在 if 语句或以下缩进块期间没有任何改变 Python 的正常控制流时,它才是正确的。如果控制流发生更改,则它不适用,这正是您在第二个示例中所做的。 return 语句确实改变了控制流,使函数立即退出,因此 if 之后的其余代码不会运行。

        其他更改控制流的语句是raise(以及在没有显式raise 语句的情况下引发异常的无效操作)、breakcontinue。后两者只在循环中有效。

        【讨论】:

          猜你喜欢
          • 2015-07-28
          • 1970-01-01
          • 2018-04-18
          • 2020-07-30
          • 2020-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多