为什么你必须要“导入”Python标准库函数?

10

我刚开始学Python编程,之前是使用PHP。我想知道为什么在Python脚本的顶部需要“导入”函数。在PHP中,你可以直接使用函数,例如:

sleep(10);

以上代码会使脚本睡眠10秒。然而,在Python中做同样的事情似乎需要导入“time”功能:

import time
time.sleep(10)

我的问题是:这为什么是必要的?如果这些额外的功能已经是 Python 的一部分,那么为什么 Python 还需要特别加载它们?在 PHP 中,如果缺少一个模块,脚本将失败。我不得不全局安装该模块,然后就可以像正常情况下一样使用它。

Python 的方法是否有优势?


6
想象一下,如果每个名字都同时可见,那将会有多么有趣。 - David Heffernan
7
PHP的方法存在缺点吗?这是一个推论。 - Simeon Visser
2
这可能是一个非常有趣的问题,而且写得很清晰和明智,但我认为它超出了StackOverflow的范围;你并没有请求帮助解决问题,也没有要求关于语言特性如何工作的客观事实细节,而是在询问关于其他人语言设计的部分主观的问题。然而,我认为这将是一个非常好的、符合主题的问题,适合放在programmers.stackexchange.com上。我会标记此内容以引起管理员的注意,并请求将其迁移到那里。 - Mark Amery
更新:版主拒绝了我的举报。未给出任何理由。 - Mark Amery
@MarkAmery:很可能Programmers的管理员认为这个问题也不适合放在那里。 - Martijn Pieters
3个回答

9

是的,有几个。这意味着默认情况下需要编译和运行的部分更少。你的程序将加载得更快,因为它只知道它实际需要的 Python 部分。

它保持全局命名空间的清洁,并允许将功能逻辑地分组到模块中。不同的模块可以具有相同名称的函数而不会发生冲突(例如,文件和套接字类都可能具有 open 和 close 函数)。


2
啊,这样做可以让 Python 整体上更加精简,因为它不需要每次都加载所有模块。这很有道理,听起来确实是一个优点。谢谢! - BoomShadow
我怎样才能知道一个给定的函数是标准库的一部分还是外部包? - Royi
它确保多个库可以同时使用类似但不兼容的功能和类似但不兼容的名称实现。 - berniethejet

4

如果您想要同时使用库A和库B中的一个名为f的函数,该怎么办?在Python中这非常简单:您可以同时导入这两个模块,然后用其所属的模块来标识正确的f名称,例如:A.f()

这带来的第一个优点是命名空间(作为解决名称冲突问题的一种解决方案)以及非污染全局范围。

第二个优点是更灵活的模块系统。


0

但是你不需要导入像"print()"或者"input()"这样的函数。 这些函数已经为你提供了。其他的函数可能不一定需要, 所以它们被放在其他地方,这就是为什么你要导入包含非默认提供的函数的模块


小小的补充:print内置函数,因此即使您在之前覆盖了 print,您仍然可以通过 __builtins__.print 来调用它。 - Matthias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接