声明与之前的#34相同的缩进;如果"语句将永远执行?

时间:2017-11-06 11:54:06

标签: python

我正在参加有关Python的在线课程。

if <TestExpression>:
    <block>
i=21

关于上面的代码(&#34; code1&#34;),讲师说i=21将执行,无论测试表达式是否为真,因为i=21具有相同的缩进if语句,意味着i=21不属于if语句。

然而,讲师还说了以下代码(&#34; code2&#34;):

def bigger(a,b):
    if a>b:
        return a
    return b

与以下代码相同(&#34; code3&#34;):

def bigger(a,b):
    if a>b:
        return a
    else:
        return b

这与他之前所说的相矛盾吗? code1中的i=21和code2中的return b都与之前的if语句具有相同的缩进,但无论测试表达式是true还是false,为什么i=21将始终执行,而return b仅在测试表达式(a&gt; b)为假时执行?

您如何确定紧跟if构造后面与if行具有相同缩进的语句是否应该执行?换句话说,您如何判断该语句是否是if构造的一部分?

2 个答案:

答案 0 :(得分:3)

这是你提出的一个很好的问题,而且很多新人都有专门的功能问题。

问题在于return关键字。在函数中,当returns为值时,函数会立即中断。因此,函数中不会运行后续代码。因此,我们可以将条件语句简写为:

if a > b:
    return a
    # Function breaks here - no more code is executed.
# This bit is never reached if a is returned
return b

观察:

def test():
    if 10 > 5:
        print("Hello!")
        return True
    print("Hi!")
    return False

当我们致电test()时,只会打印Hello!

这有用的一个原因是在Python中有多个条件语句时停止错误的空格。当然,在大多数其他编程语言中,由于空白不是一个特征,因此它并不是必需的。

想象一下,您正在编写一个函数来检查数字是否为素数,其中需要大量条件语句。 (当然,为了这个例子,这不是有效的):

def is_prime(n):
    if n == 1:
        return False
    else:
        if n == 2:
            return True
        else:
            for i in range(2, n):
                if n % i == 0:
                    return False # A factor exists
                else:
                    continue
            return True

知道return打破了这个功能,我们可以将其重写为:

def is_prime(n):
    if n == 1:
        return False
    if n == 2:
        return True:
    for i in range(2, n):
        if n % i == 0:
            return False # A factor exists
    return True

看看压痕是如此清洁?

答案 1 :(得分:2)

那是因为你不能从函数中返回两次。当if满足时,它将返回并且不再执行任何语句。因此,下一个return语句无法访问。

下一个return只会在if失败时执行。 else失败时也会执行if

这就是为什么你的老师说,两者都是一样的。