首页 > 后端开发 > Python教程 > 为什么要避免在 Python 中使用'import *”?

为什么要避免在 Python 中使用'import *”?

Susan Sarandon
发布: 2024-11-15 19:26:02
原创
569 人浏览过

Why Should You Avoid `import *` in Python?

揭开 Python 中 Import * 的秘密

在 Python 中,神秘的命令“import *”授予对模块资源前所未有的访问权限。它不仅导入指定的模块,还导入位于包含文件夹中的珍贵的 __init__.py 文件。结果,受祝福的 __init__.py 模块成为当前命名空间不可或缺的一部分。

从 project.model 声明

借助 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板