Python中import与from-import机制深度解析
本文详细解析Python中import与from-import的区别,涵盖模块路径查找机制、局部作用域引用差异、私有属性访问权限及模块重载方法。通过对比import模块名与from模块名import *的行为,阐明对象引用与拷贝的本质差异,并提供reload()重新导入模块的实操指南。
在Python中,导入模块的路径查找遵循特定规则。系统会依据sys.path列表中的路径顺序依次搜索目标模块,其中空字符串代表当前执行目录。若需添加新路径,可通过修改sys.path列表或调整操作系统的环境变量PYTHON_PATH实现,例如在Linux系统中使用export命令追加路径。
# 将模块所在路径再程序中添加到sys.path列表中
import sys
sys.path
import导入模块按照sys.path顺序依次查找,“”代表当前路径
# 修改操作系统的PYTHON_PATH环境变量
# 系统的环境变量
export PYTHON_PATH=$PYTHON_PATH:新的路径import 模块名与 from 模块名 import * 在行为上存在显著差异,主要体现在属性访问方式上。使用 import 模块名时,通过模块名.xxx 进行的是引用操作;而使用 from 模块名 import * 时,xxx 表现为将模块属性拷贝至当前命名空间,这意味着可以直接修改属性值。对于函数和类等对象,两种方式均保持引用关系。
1. 调用模块属性的区别
import 模块名
模块名.xxx = 引用
from 模块名 import *
xxx = 拷贝 # 能修改属性值
函数,类... : "import 模块名" 和 "from 模块名 import *" 都是引用
2. 私有属性两种导入的区别 # . 类中的私有属性
# 本质做了一个名字重整
class test()
self.__name
__name 名字重整成 _test__name _littlethree : 模块的私有属性(数据)
from 模块 import * : 导入模块时,会跳过私有属性;
import 模块 : 通过引用可以访问私有属性当需要重新导入已加载的模块时,标准import语句多次执行仅生效第一次。若需强制重新加载,可使用reload()函数。具体操作为:先导入imp模块(from imp import reload),然后调用reload(模块名)。注意,此方法仅在第一次导入后有效,重启程序亦可达到类似效果。
import a
import a
# 注意:import多次,只有第一次会执行;
# 或者重启程序
"""reload()方法能重新导入模块"""
from imp import reload
reload(模块名)import与from-import的核心区别在于局部作用域的处理及私有属性的访问权限。import A 语句会在本地作用域创建名为A的模块对象引用,可通过locals()查看;而 from A import B 则直接在本地作用域创建名为B的对象,该对象是模块中B的引用。
在类内部,以双下划线开头的私有属性(如self.__name)会经过名字重整机制,转换为_Test__name形式。对于模块级别的私有数据(如_littlethree),from 模块 import * 语句会自动跳过私有属性不进行导入,而使用 import 模块 则可通过模块名引用访问这些私有属性。


本文介绍了Python中import与from-import的主要区别,包括路径查找、引用机制及重载方法。如需了解更多相关内容,可参考本站历史文章或继续浏览后续教程。感谢支持,欢迎持续关注我们的技术分享。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













