首页 > 解决方案 > 为什么python中有elif?

问题描述

所以我对使用elifPython 的目的有点困惑。有elif办法缩短else if吗?哪个更 Pythonicelif或其他if声明?为什么在 Python 中有 elif 而在 Java 之类的东西中却没有?

感谢您帮助我更好地理解 Python 语言的瑰宝。

标签: python

解决方案


Python 必须elif使解析更容易。语法的设计目标之一是使解析器比其他需要上下文无关语法的语言更简单。更快的解析意味着更快的解释器。

如果我有else if,在我到达 if 之前,我不知道 else 是什么意思。要用python写这个,我实际上需要说

if cond1:
    ...
else:
    if cond2:
        ...

有了elif,我有一个明确的符号。

在功能上,这两个语句是相同的:

>>> def foo(x):
...     if x == 1:
...         return 1
...     else:
...         if x == 2:
...             return 2
... 

>>> def bar(x):
...     if x == 1:
...         return 1
...     elif x == 2:
...         return 2
...

>>> dis.dis(foo)
  2           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (1)
              6 COMPARE_OP               2 (==)
              9 POP_JUMP_IF_FALSE       16

  3          12 LOAD_CONST               1 (1)
             15 RETURN_VALUE        

  5     >>   16 LOAD_FAST                0 (x)
             19 LOAD_CONST               2 (2)
             22 COMPARE_OP               2 (==)
             25 POP_JUMP_IF_FALSE       32

  6          28 LOAD_CONST               2 (2)
             31 RETURN_VALUE        
        >>   32 LOAD_CONST               0 (None)
             35 RETURN_VALUE        
>>> dis.dis(bar)
  2           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (1)
              6 COMPARE_OP               2 (==)
              9 POP_JUMP_IF_FALSE       16

  3          12 LOAD_CONST               1 (1)
             15 RETURN_VALUE        

  4     >>   16 LOAD_FAST                0 (x)
             19 LOAD_CONST               2 (2)
             22 COMPARE_OP               2 (==)
             25 POP_JUMP_IF_FALSE       32

  5          28 LOAD_CONST               2 (2)
             31 RETURN_VALUE        
        >>   32 LOAD_CONST               0 (None)
             35 RETURN_VALUE 

推荐阅读