为什么python使用模块,而不是仅仅包含主语言中的模块功能。这将是非常有用和非常简单的,特别是对于诸如random,re和os之类的主要内容。如果Python宣扬简单和极简主义,为什么还要编写额外的代码行?
答案 0 :(得分:15)
1)Python的禅宗#19:“命名空间是一个很棒的主意 - 让我们做更多的事情!”
命名模块很好,因为它们消除了具有相同名称的函数之间发生冲突的可能性。如果所有内容都是内置的,则os.error()
会与logging.error()
发生冲突(天堂禁止您尝试定义自己的error()
函数!)
同上内置int()
函数和random.int()
函数。您必须将后者写为random_int()
,这与模块语法一样多。为什么不明确命名空间并使用模块?
这与语法from os import *
不相符的原因相同 - 它会污染您的命名空间并引入令人兴奋的名称冲突错误。
2)谁决定什么是内置模块?什么是模块?
您亲自撰写的大部分程序都涉及os
和re
。就个人而言,我在过去三个月中撰写的每篇剧本都涉及sqlite3
,csv
和logging
。是否应该将这些内容包含在任何Python程序员编写的每个程序中?
一段时间后,你的内置组件列表会比Ben Hur更大。
答案 1 :(得分:4)
内存和速度效率
已创建的对象(一切都是Python中的对象)占用分配给Python解释器进程的内存。导入模块时,会执行其代码,从而导致创建许多对象(函数,类,数据等),其中大部分必须在内存中保留才有用。通过将功能分离为逻辑上不同的模块,我们允许程序将其内存仅用于提供所需功能的对象。
如果所有内容都是内置的,那么整个标准库的所有类,函数和其他对象都会占用大量内存,其中不到1%实际上对普通程序有用。此外,每次解释器启动时,您都会浪费时间执行创建所有这些对象的所有代码。