我正在阅读 python 3.6 中 from … import
与 import ...
之间的区别。
经过多次搜索,我找不到我的具体问题的任何答案。
看下面的例子:
from urllib import request
import urllib
1) 它们相等吗?我想从英语的基本含义来看,第一个只导入 request
,第二个导入 urllib
中的所有内容,包括 request
和许多其他内容。我说得对吗?
2) I 1 是正确的,假设我的 python 程序仅使用来自 urllib
的 request
使用第一个而不是第二个会有任何性能优势吗?
最佳答案
它几乎完全取决于上下文、风格指南(例如 google style guide defines this )和开发人员,但我个人遵循一些指南。
- 如果您要导入的函数的名称可以有不止一种含义,请使用
import module
样式。例如,如果一个模块有一个像select()
这样的名字,这可能意味着很多事情。如果它来自一个 sql 库,它可能是一个 select 语句,我也看到在接受用户输入的库中使用相同的名称等。基本上遵循 Zen of pythonExplicit is better than implicit
- 如果您的依赖项/标准库中有不止一种同名用法。例如在
math
和secrets
模块中都有一个函数调用的选择,但只有secrets
模块中的一个被设计用于密码学,因此最好import secrets
并使用secrets.choice
或math.choice
,这样您就知道自己在使用哪个。 - 如果您(或您的团队)使用不同的术语,最好使用
from module import function as blah
。只要这个术语是一致的,这就是组织导入的好方法。例如,如果您的团队总是将random.randint
称为randy
,您可以执行from random import randint as randy
(这是一个不好的例子,这正是我突然想到的),尽管这意味着您组织之外的任何人都不一定理解代码的作用。 - 不要使用
from module import *
这总是一个糟糕的想法,因为它会引入所有内容并且可能导致与文件内函数的名称冲突。 - 如果库中有您想使用的内置名称,那么使用
from module import blah
可以避免命名冲突。 - 这是一个有点迂腐的观点,老实说,除非您导入的东西数量多得离谱,否则这无关紧要,但导入选择函数实际上更快,因为 python 初始化解释器 session 的方式。不过,这只在大规模情况下才重要。
我可以继续说很久,但是@ Mayank提到这里已经发布了另一个好的答案:Use 'import module' or 'from module import'?
关于python 3导入所有包与一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61646585/