我正在参加有关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
构造的一部分?
答案 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
。
这就是为什么你的老师说,两者都是一样的。