Python中`from ... import ...`语法背后的理由
我一直在想,为什么从一个模块中导入特定对象的语法是 from module import x, y, z
,而不是 import x, y, z from module
。我不是母语者,但后者不是听起来更正确/自然吗?
那么,为什么要把“from”放在前面呢?是为了简化语法(需要更少的前瞻)吗?还是为了让这两种导入方式在视觉上更明显区分?还是说这是那种明显的方式“乍一看并不明显,除非你是荷兰人”的情况呢?;)
8 个回答
5
我对这个语法的来历不是很了解,因为它是从Python 1.x时代就开始使用的。不过,我觉得能快速浏览代码左边,找到一个脚本依赖的模块名称是很有用的。如果一行代码写成“import a,b,c,d,e,really_long_name, alsdf,lsdf from blah”,那我就得花点时间去找出这个脚本其实是依赖于blah这个模块的。
17
这只是一个非常大胆的猜测,可能完全没有道理,但我记得这种语法来自于Modula-2(天哪,那是二十年前的事了,我感觉自己老了)……也许Python是受它的启发呢?
21
我不知道为什么会这样做,但我觉得这样做是合理的。作为一个工程师,我觉得从一个大类开始,然后逐渐细化到具体的内容,这样更自然。
这样做还有个好处,就是如果按顺序处理,解析器需要存储的信息会更少。比如:
import x, y, z from a
你需要记住 x
、y
和 z
。而如果是:
from a import x, y, z
你只需要记住 a
。
这就是我第一次遇到Perl的后置条件时遇到的麻烦:
$x = $y if $y > 40;
因为你事先并不知道你正在阅读的内容是否是条件语句。