总是执行一个与先前的“if”语句缩进相同的语句吗?

2024-05-15 05:03:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在参加一个关于Python的在线课程。你知道吗

if <TestExpression>:
    <block>
i=21

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

不过,讲师还说了以下代码(“代码2”):

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

与以下代码(“代码3”)相同:

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

这和他之前说的不矛盾吗?^code1中的{}和code2中的return b都与它们以前的if语句具有相同的缩进,但是为什么i=21总是在测试表达式为真或假的情况下执行,而return b只在测试表达式(a>;b)为假的情况下执行?你知道吗

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


Tags: 代码returnif表达式def情况语句block
2条回答

这是你问的一个很好的问题,很多新人都有这个问题。你知道吗

问题在于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

你看凹痕怎么这么干净?你知道吗

这是因为一个函数不能返回两次。当满足if时,它将返回并且不再执行任何语句。因此,下一个return语句是不可访问的。你知道吗

下一个return只在if失败时执行。^当if失败时,也会执行{}。你知道吗

这就是为什么你的老师说,他们都是一样的。你知道吗

相关问题 更多 >

    热门问题