python - 为什么python中有elif?
问题描述
所以我对使用elif
Python 的目的有点困惑。有elif
办法缩短else if
吗?哪个更 Pythonicelif
或其他if
声明?为什么在 Python 中有 elif 而在 Java 之类的东西中却没有?
感谢您帮助我更好地理解 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
推荐阅读
- dynamics-crm - Dynamics 365:将默认视图更改为自定义搜索
- c# - 如何使用 RazorEngine 将 System.Text.RegularExpressions 添加到模板?
- c# - Linq Any - 在此上下文中仅支持原始类型或枚举类型
- token - 从 IdentityServer 检索访问令牌
- java - 使用 ,equals() 比较对象时出现意外的断言失败错误
- webview - 将微调器链接到 Webviewer
- python-3.x - 禁止 pandas read_sql 中的科学记数法
- c++ - 如何判断指针是否是指向数组的指针?
- python - Python - 如何打印包含类对象的列表内容?
- javascript - node.js:意外的令牌{