我正在参加 Python 在线类(class)。
if <TestExpression>:
<block>
i=21
关于上面的代码(“code1”),讲师说i=21
会执行,不管测试表达式是否为真,因为i=21
与 if
语句具有相同的缩进,这意味着 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/