否则基本上是多余的

时间:2016-09-21 21:28:40

标签: python if-statement syntax

我没有编程的背景,所以这可能真的很愚蠢,但我以前从未考虑过这个问题:似乎else语句基本上是多余的,因为当条件为False时,Python只是移动到下一个没有缩进的行。

例如,通常你会写:(如果不使用elif

x=2
if x == 1: 
    value = "one"
else:
    if x == 2:
        value = "two"
print value

但这也有效:

x=2
if x == 1: 
    value = "one"
if x == 2:
    value = "two"
print value

有人可以举例说明else:声明是如何以及何时必不可少的?

4 个答案:

答案 0 :(得分:2)

如果条件相互排斥,则else是多余的。但是,如果条件重叠,则不是这样。

x = 2
if x > 0:
    print 'foo'
else:                   # better -- elif x > 1:
    if x > 1:
        print 'bar'

此程序打印foo

x = 2
if x > 0:
    print 'foo'
if x > 1:
    print 'bar'

此程序会打印foo bar

答案 1 :(得分:1)

else 记住条件为False。例如,请考虑以下代码:

if x == 1:
    x = 2
    print("bar")
else:
   if x == 2:
       print("foo")

使用 else,只有" bar"或" foo"将被打印。

没有 else,两者都是" bar"和" foo"可以打印,因为x的值可以更改。

这也有助于重叠'条件:

if x > 10: 
    print("big")
elif x > 5: 
    print("medium")
elif x > 1:
    print("sizable")
else:
    print("small")

答案 2 :(得分:0)

其他不是必须的,而是一种便利。以下是一些:

if x == 1: 
    value = "one"
else:
    value = "not_one"

if x < 1: 
    value = "less_than_one"
elif x < 2:
    value = "between_one_and_two"
else:
    value = "more_than_two"

它们都可以改写为:

if x == 1: 
    value = "one"
if x != 1:
    value = "not_one"

if x < 1: 
    value = "less_than_one"
if 1 <= x < 2:
    value = "between_one_and_two"
if 2 <= x:
    value = "more_than_two"

答案 3 :(得分:0)

如果您要查找特定案例(使用else),然后查找if未涵盖的所有其他内容(使用if,则else子句非常有用)。

通常使用conditional expression

>>> x=3
>>> value='one' if x==1 else 'not one'
>>> value
'not one'

如果您未在此使用else(作为条件的一部分或作为if/else的一部分,则value将无法定义:

>>> del value   # remove the name `value`
>>> x
3
>>> if x==1: value='one'
... 
>>> value
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'value' is not defined

因此,如果x不是1,您需要else类来确保value收到作业。

BTW,在Python中,您可以使用默认的字典而不是if/elif/elif/else的长级联:

>>> conditions={1:'one', 2:'two', 3:'three'}
>>> conditions.get(2,'not one, two, or three...')
'two'
>>> conditions.get(19,'not one, two, or three...')
'not one, two, or three...'