Sea*_*etz 17 python conditional idioms
如果我有一个带有多个条件语句的函数,其中每个分支都被执行从函数返回.我应该使用多个if语句,还是使用/ elif/else?例如,假设我有一个功能:
def example(x):
if x > 0:
return 'positive'
if x < 0:
return 'negative'
return 'zero'
Run Code Online (Sandbox Code Playgroud)
写作更好:
def example(x):
if x > 0:
return 'positive'
elif x < 0:
return 'negative'
else:
return 'zero'
Run Code Online (Sandbox Code Playgroud)
两者都有相同的结果,但是比另一个更有效或被认为更惯用?
编辑:
有几个人说在第一个例子中,if语句总是被评估,这对我来说似乎并非如此
例如,如果我运行代码:
l = [1,2,3]
def test(a):
if a > 0:
return a
if a > 2:
l.append(4)
test(5)
Run Code Online (Sandbox Code Playgroud)
我仍然会等于[1,2,3]
Gar*_*tty 16
我会将我的评论扩展到答案.
在所有案件都返回的情况下,这些确实是等同的.在选择它们之间变得重要的是那么更具可读性.
您的后一个示例使用该elif结构明确声明这些情况是互斥的,而不是依赖于它们隐含地来自返回的事实.这使得该信息更加明显,因此代码更易于阅读,并且不易出错.
比如说,有人决定还有另一个案例:
def example(x):
if x > 0:
return 'positive'
if x == -15:
print("special case!")
if x < 0:
return 'negative'
return 'zero'
Run Code Online (Sandbox Code Playgroud)
突然间,如果用户希望这种情况相互排斥,那么就存在一个潜在的错误(显然,考虑到这个例子,这没有多大意义,但可能在更现实的情况下).如果使用elifs,则会消除这种歧义,并且在添加代码的人员可以在他们添加代码时可以看到的行为时,该行为可见.
如果我遇到你的第一个代码示例,我可能会认为选择使用ifs而不是elifs隐含的情况并不是互斥的,所以改变值的方法x可能会用来改变if执行的(显然是这种情况是明显的,相互排斥的,但同样,我们谈的是不那么明显的情况 - 并且一致性很好,所以即使在一个简单的例子中,当它很明显时,最好坚持一种方式).
检查一下以了解区别:
>>> a = 2
>>> if a > 1: a = a+1
...
>>> if a > 2: a = a+1
...
>>> a
4
Run Code Online (Sandbox Code Playgroud)
与
>>> a = 2
>>> if a > 1: a = a+1
... elif a > 2: a = a+1
...
>>> a
3
Run Code Online (Sandbox Code Playgroud)
第一种情况等效于两个不同if的带有空else语句的(或想象else: pass);在第二种情况下elif是第一条if陈述的一部分。
在某些情况下,elif需要正确的语义。当条件不互相排斥时就是这种情况:
if x == 0: result = 0
elif y == 0: result = None
else: result = x / y
Run Code Online (Sandbox Code Playgroud)
在某些情况下,它是有效的,因为解释器不需要检查所有条件,这就是您的示例中的情况。如果 x 是负数那么为什么要检查正数情况?在这种情况下, Anelif还使代码更具可读性,因为它清楚地表明只会执行一个分支。
| 归档时间: |
|
| 查看次数: |
20319 次 |
| 最近记录: |