python - 与之前的 "if"语句具有相同缩进的语句将始终执行?

标签 python

我正在参加 Python 在线类(class)。

if <TestExpression>:
    <block>
i=21

关于上面的代码(“code1”),讲师说i=21会执行,不管测试表达式是否为真,因为i=21if 语句具有相同的缩进,这意味着 i=21 不是 if 语句的一部分。

不过,讲师还说了下面的代码(“code2”):

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

与下面的代码(“code3”)相同:

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

这和他之前说的不矛盾吗? code1 中的 i=21 和 code2 中的 return b 都与之前的 if 语句具有相同的缩进,但为什么 i=21 无论测试表达式为真还是假都会一直执行,而return b只有在测试表达式(a>b)为false时才执行?

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

最佳答案

这是您提出的一个很好的问题,也是许多新手在特定功能方面遇到的问题。

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

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

看到缩进是如何干净多了?

关于python - 与之前的 "if"语句具有相同缩进的语句将始终执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47136451/

相关文章:

Python 电子邮件 - 8 位 MIME 支持

python - 如何在 Cython 中使用不同的 C++ 编译器?

python - DeepLab v3-如何处理任何大小比例的图像。 (h * w)

python - 用 replace() 替换的字符变为 0

c# - 是否可以用 C# 以外的语言实现属性?

python - 如果进程挂起/崩溃,如何重新启动 python 脚本

python - 如何在 Tkinter 中没有 "submit"按钮的情况下更新条目?

Python 2.7.4 上的/和//运算符

python - 如何检查for循环中的特定值然后结束它?

python - 在python中,如何按元素的频率对列表进行排序