Zac*_*ché 3 python import python-import
假设我有一个要导入一些包的文件:
# myfile.py
import os
import re
import pathlib
def func(x, y):
print(x, y)
Run Code Online (Sandbox Code Playgroud)
如果我进入另一个文件并输入
from myfile import *
Run Code Online (Sandbox Code Playgroud)
它不仅导入,还func导入os、、、、repathlib
但我不希望在导入时导入这些模块import *。
为什么它会导入我正在导入的其他包以及如何避免这种情况?
因为import导入命名空间中的每个名称。如果某些内容在模块内有名称,则导出它是有效的。
首先,您几乎不应该使用import *. 导入您尝试使用的特定方法/变量 ( from module import func) 或导入整个模块并通过点表示法访问方法/变量 ( import module; ...; module.func()) 几乎总是更清晰的代码。
也就是说,如果您必须使用import * from module,有几种方法可以防止从 导出某些名称module:
以 开头的名称_将不会被导入import * from ...。它们仍然可以直接导入(即from module import _name),但不能自动导入。这意味着您可以重命名导入,这样它们就不会被导出,例如import os as _os. 但是,这也意味着该模块中的整个代码必须引用而_os不是os,因此您可能需要修改大量代码。
如果模块包含 name __all__: List[str],则将import *仅导出该列表中包含的名称。在您的示例中,将该行添加__all__ = ['func']到您的myfile.py,然后import *将仅导入func。另请参阅此答案。
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |