'else if'的正确语法是什么?


284

我是一名新的Python程序员,他正在从2.6.4跃升至3.1.1。在尝试使用“ else if”语句之前,一切都进行得很好。解释器在“ else if”中的“ if”之后给了我一个语法错误,原因是我似乎无法弄清。

def function(a):
    if a == '1':
        print ('1a')
    else if a == '2'
        print ('2a')
    else print ('3a')

function(input('input:'))

我可能缺少一些非常简单的东西;但是,我无法自行找到答案。


3
我认为这不适用于2.6.4。
wRAR 2010年

实际上,在这些版本之间,Python语法和语义的这一元素没有改变。可能根本不会。
Mike Graham

您可以从python的if / else 入门
Triton Man

Answers:


444

在python中,“ else if”被拼写为“ elif”。
另外,您还需要在elif和之后加上一个冒号else

简单回答一个简单的问题。刚开始时(过去几周),我遇到了同样的问题。

因此,您的代码应为:

def function(a):
    if a == '1':
        print('1a')
    elif a == '2':
        print('2a')
    else:
        print('3a')

function(input('input:'))

11
不用担心,我们每个人都必须学习。我发现python将这样的elphisise放在可读性上,然后去使用elkif代替了它,这很奇怪。我建议始终保持打开python API手册:docs.python.org/3.1重要链接是Tutorial:docs.python.org/3.1/tutorial/index.html语言参考:docs.python.org/3.1/reference /index.html图书馆参考:docs.python.org/3.1/library/index.html
Lyndon White

1
Perl使用相同的关键字,其基本原理是防止发生意外事故,以防您忘记完成之前的else语句的编写,而开始编写另一个if语句。显然,这是编写C代码时的常见问题。
内特·格伦

1
@NateGlenn Perl实际上使用elsif,我想Python必须是一个高效的字符。“ Elif”似乎起源于C预处理程序,它#elif早于Python AFAICT使用。显然,在这种情况下,使用单令牌指令非常有价值,因为解析#else if <code>vs. #else <code that could theoretically even be an if statement>将使原本就很简单的语法变得复杂。
FeRD


13
def function(a):
    if a == '1':
        print ('1a')
    elif a == '2':
        print ('2a')
    else:
        print ('3a')

10

自古以来,if/else ifPython中正确的语法是elif。顺便说一句,如果您有很多if/else.eg ,则可以使用字典。

d={"1":"1a","2":"2a"}
if not a in d: print("3a")
else: print (d[a])

对于msw,使用字典执行函数的示例。

def print_one(arg=None):
    print "one"

def print_two(num):
    print "two %s" % num

execfunctions = { 1 : (print_one, ['**arg'] ) , 2 : (print_two , ['**arg'] )}
try:
    execfunctions[1][0]()
except KeyError,e:
    print "Invalid option: ",e

try:
    execfunctions[2][0]("test")
except KeyError,e:
    print "Invalid option: ",e
else:
    sys.exit()

1
您可以,但是请不要这样做。字典不能很好地代替字典elif
S.Lott

@ s.lott,OP的情况很简单。如果他必须检查a的许多值,那么字典会更整洁。您可能会养成不使用它的习惯,但是我一直在使用它,而且比起许多if / else,我更喜欢这种方法。哎呀,我什至用字典来执行功能。
ghostdog74 2010年

1
@ghostdog:我知道您可以使用字典来执行函数,但是这个想法使我感到恐惧,就像计算的goto或将Tcl字符串粘贴在一起并exec对其进行粘贴。这是好习惯吗?你能举个例子吗?
msw

@msw:这是很好的做法。示例:您正在读取XML流不是为了进行简单的刮除练习,而是为了对不同的元素标签进行不同的处理(例如,Excel 2007电子表格文件)是多个XML文档的zip,这非常复杂。每个标签都有单独的方法。您通过字典发送。没什么好害怕的。如果处理方法<foo>do_foo,则您甚至可以在应用启动时即时构建字典。
约翰·马钦

1
请注意,字典中的.get方法可以让您指定默认值。您的第一个示例可以写为print d.get(a, "3a")
codeape

4

这是函数的一点重构(它不使用“ else”或“ elif”):

def function(a):
    if a not in (1, 2):
        a = 3
    print(str(a) + "a")

@ ghostdog74:Python 3要求在“打印”中加上括号。


python 3用函数替换了python 2的print语句,从而替换了所需的括号,如果要这样做,则最好也使用sys.stdout.write
。2010年

2
应该是('1', '2'),操作正在使用字符串
priestc 2011年

2
def function(a):
    if a == '1':
        print ('1a')
    else if a == '2'
        print ('2a')
    else print ('3a')

应该更正为:

def function(a):
    if a == '1':
        print('1a')
    elif a == '2':
        print('2a')
    else:
        print('3a')

正如您所看到的,else如果应该更改为elif,则'2'之后应该有冒号,否则,else语句之后应该有一个新行,并关闭print和括号之间的空间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.