第12章 模块(1)

本文详细介绍了Python中模块和包的概念,如何通过模块和文件来组织代码,以及导入和搜索路径的相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块是用来组织Python代码的方法,而包则是用来组织模块的。

12.1 什么是模块

模块支持从逻辑上组织Python代码。当代码量变得相当大的时候,我们最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互。这些代码片段相互间有一定的联系,可能是一个包含数据成员的方法的类,也可能是一组相关但彼此独立的操作函数。这段代码是共享的,所以Python允许“调入”一个模块,允许使用其他模块的属性来利用之前的工作成果,实现代码重用。这个把其他模块中属性附加到你的模块中的操作叫做导入(import)。那些自我包含并且有组织的代码片段就是模块(module)。

12.2 模块和文件

如果说模块是按照逻辑来组织Python代码的方法,那么文件便是物理层上组织模块的方法。一个文件被看作是一个独立模块,一个模块也可以被看作是一个文件。模块的文件名就是模块的名字加上扩展名.py。与其他可以导入类(class)的语言不同,在Python中你导入的是模块或模块属性。

12.2.1 模块名称空间

一个名称空间就是一个从名称到对象的关系映射集合。

即使属性之间有名称冲突,但它们的完整授权名称——通过句点属性标识指定了各自的名称空间——防止了名称冲突的发生。

12.2.2 搜索路径和路径搜索

模块的导入需要一个叫做“路径搜索”的过程。即在文件系统“预定义区域”中查找mymodule.py文件。这些预定义区域只不过是你的Python搜索路径的集合。路径搜索和搜索路径是两个不同的概念。前者是指查找某个文件的操作,后者是去查找某一目录。

默认搜索路径是在编译或是安装时指定的。它可以在一个或两个地方修改。

一个是启动Python 的shell命令或命令行的PYTHONPATH环境变量。该变量的内容是一组用冒号分割的目录路径。如果想让解释器使用这个变量,那么请确保在启动解释器或执行Python脚本前设置或修改了该变量。

解释器启动后也可以访问这个搜索路径,他会被保存在sys模块的sys.path变量里。不过它已经不是冒号分割的字符串,而是包含每个独立路径的列表。

>>> import sys
>>> sys.path
['', 'C:\\WINDOWS\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27\\Lib\\site-packages\\pythonwin', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib']
>>>

如果你需要导入的模块是什么,而它的路径不在搜索路径里,那么只需要调用列表的append()方法即可。

>>> sys.path.append("C:\\")
>>> sys.path
['', 'C:\\WINDOWS\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27\\Lib\\site-packages\\pythonwin', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\']
>>>

你可能有一个模块的很多拷贝。这时,解释器会使用沿搜索路径顺序找到的第一个模块。

使用sys.modules可以找到当前导入了哪些模块和它们来自什么地方。和sys.path不同,sys.modules是一个字典,使用模块名作为键(key),对应物理地址为值(value)。

>>> for module in sys.modules.keys():
... print sys.modules[module]
...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值