Python 3.x 即使在“以后”;如果;条件满足了,怎么回事;否则";代码仍在运行

Python 3.x 即使在“以后”;如果;条件满足了,怎么回事;否则";代码仍在运行,python-3.x,Python 3.x,在下面的代码中,为什么即使在n==0时也会执行“result=n*recurse”。如果执行了else语句,是否应该忽略else语句。换句话说,为什么两个代码给出相同的输出 我的理解是,在第一个代码中,一旦n==0,如果满足条件,则不会执行else语句。因此,在第一个代码的输出中不应出现“返回1”的后续打印 def factorial(n): space = ' ' * (4 * n) print(space, 'factorial', n) if n == 0:

在下面的代码中,为什么即使在n==0时也会执行“result=n*recurse”。如果执行了else语句,是否应该忽略else语句。换句话说,为什么两个代码给出相同的输出

我的理解是,在第一个代码中,一旦n==0,如果满足条件,则不会执行else语句。因此,在第一个代码的输出中不应出现“返回1”的后续打印

def factorial(n):
    space = ' ' * (4 * n)
    print(space, 'factorial', n)
    if n == 0:
        print(space, 'returning 1')
        return 1
    else:
        recurse = factorial(n-1)
        result = n * recurse
        print(space, 'returning', result)
        return result

def factorial(n):
    space = ' ' * (4 * n)
    print(space, 'factorial', n)
    if n == 0:
        print(space, 'returning 1')
        return 1
    else:
        recurse = factorial(n-1)
    result = n * recurse
    print(space, 'returning', result)
    return result

factorial (4)



Both the codes gives the same result:
             factorial 4
         factorial 3
     factorial 2
  factorial 1
factorial 0
returning 1
 returning 1
     returning 2
         returning 6
             returning 24

这是因为该行不在if-else语句的范围内,请参见下面代码中的注释:

def factorial(n):
    space = ' ' * (4 * n)
    print(space, 'factorial', n)
    if n == 0:
        print(space, 'returning 1')
        return 1
    else:
        recurse = factorial(n-1)
    result = n * recurse # ****THIS IS OUTSIDE IF CLAUSE****
    print(space, 'returning', result)
    return result
如果您希望它位于else语句中,请将
result=n*recurse
放入与
recurse=factorial(n-1)
相同的缩进:

def factorial(n):
    space = ' ' * (4 * n)
    print(space, 'factorial', n)
    if n == 0:
        print(space, 'returning 1')
        return 1
    else:
        recurse = factorial(n-1)
        result = n * recurse # ****THIS IS INSIDE IF-ELSE CLAUSE****
    print(space, 'returning', result)
    return result

这是因为该行不在if-else语句的范围内,请参见下面代码中的注释:

def factorial(n):
    space = ' ' * (4 * n)
    print(space, 'factorial', n)
    if n == 0:
        print(space, 'returning 1')
        return 1
    else:
        recurse = factorial(n-1)
    result = n * recurse # ****THIS IS OUTSIDE IF CLAUSE****
    print(space, 'returning', result)
    return result
如果您希望它位于else语句中,请将
result=n*recurse
放入与
recurse=factorial(n-1)
相同的缩进:

def factorial(n):
    space = ' ' * (4 * n)
    print(space, 'factorial', n)
    if n == 0:
        print(space, 'returning 1')
        return 1
    else:
        recurse = factorial(n-1)
        result = n * recurse # ****THIS IS INSIDE IF-ELSE CLAUSE****
    print(space, 'returning', result)
    return result

在第一个代码中,缩进是相同的,因此该行位于if-else子句内。因此,当n=0时,为什么else块中的所有行仍在第一个代码中执行。我在第二个代码中很清楚,这是我感到困惑的第一个代码。我给这两个代码是为了知道为什么结果是相同的,即使else块中的缩进是不同的。您需要注意将这两个代码分开。如果你在例如Jupyter笔记本的一个单元格中运行它,第二个单元格会覆盖第一个单元格,你知道吗?如果你有一个有效的代码,那么在一个无效的代码上浪费时间就没有多大意义了。在第一个代码中,缩进是相同的,因此行在If else子句中。因此,当n=0时,为什么else块中的所有行仍在第一个代码中执行。我在第二个代码中很清楚,这是我感到困惑的第一个代码。我给这两个代码是为了知道为什么结果是相同的,即使else块中的缩进是不同的。您需要注意将这两个代码分开。如果你在Jupyter笔记本的一个单元格中运行它,第二个单元格会覆盖第一个单元格,你知道吗?如果你有一个代码可以工作,那么在一个不工作的单元格上浪费时间是没有多大意义的。