在 Python 中,神秘的命令“import *”授予对模块资源前所未有的访问权限。它不仅导入指定的模块,还导入位于包含文件夹中的珍贵的 __init__.py 文件。结果,受祝福的 __init__.py 模块成为当前命名空间不可或缺的一部分。
借助 import 的功能,需要显式声明“from project.model import __init__" 消失了。一个简单的“from project.model import ”足以包含project.model模块及其神圣的__init__.py文件中的所有内容。
import * 的魅力在于它能够将所有命名对象(除了以下划线开头的对象)从指定模块导入到当前命名空间中。 这允许轻松访问任何导入的对象,而无需在其名称前加上模块标识符的前缀。
例如,考虑以下代码片段:
from math import *
这个神奇的咒语允许我们在没有任何事先认识的情况下无缝地运用 pi 的力量:
pi 3.141592653589793
但是,导入 * 的巨大力量是有代价的。它带来了命名空间冲突的危险,可能会覆盖当前范围内的现有变量。此外,如果目标模块包含过多的对象,则可能会效率低下。最后,也许也是最重要的,它扼杀了代码的自记录性质,使变量、方法和类的起源笼罩在神秘之中。
因此,明智的人我们保留 import * 用于临时测试,并更喜欢使用更明确的生产代码替代方案。一个谨慎的选择是仅显式导入所需的对象:
from math import pi
或者,在不同的命名空间下导入整个模块可能是一种明智的妥协:
import math as m
要揭开 import * 的神秘面纱,必须了解其工作原理。默认情况下,它导入所有命名对象(不包括以下划线开头的对象)。但是,如果指定模块定义 all 变量,则会给出优先级,并且仅导入该变量中枚举的名称。
许多标准 Python 库都组织成子模块,例如 urllib.request,这是 urllib 模块的普遍扩展。需要注意的是 import * from urllib 不会遍历这些神圣的殿堂;需要单独的导入语句才能访问它们:
from math import *
不起眼的 import * 命令拥有巨大的力量,提供将整个模块的内容导入到当前命名空间的能力。然而,这种权力必须谨慎使用,以免命名空间冲突、效率低下和缺乏自我文档的危险让我们陷入困境。对于生产代码,更明确和结构化的导入实践是通往平静和清晰的道路。
以上是为什么要避免在 Python 中使用'import *”?的详细内容。更多信息请关注PHP中文网其他相关文章!