码迷,mamicode.com
首页 > 编程语言 > 详细

Python回顾与整理10:模块

时间:2016-04-17 01:00:54      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:模块   python   

0.说明


        模块是用来组织Python代码方法的方法,而包则是用来组织模块的,充分利用好包和模块将有利于开发出结构清晰的大型程序。




1.什么是模块


        所谓模块,其实就是一个包含了特定功能代码的.py文件,在这个.py文件中,主要有如下的代码类型:

  • 包含数据成员和方法的类

  • 一组相关但彼此独立的操作函数

  • 全局变量

        使用import语句就可以导入一个模块中的相关属性。




2.模块和文件


        模块是按照逻辑上来组织Python代码的方法,而体现在物理层面上,它就是一个文件,因此,一个文件被看作是一个独立模块,一个模块也可以被看作是一个文件。模块的文件名就是模块的名字加上扩展名.py。

        与其他可以导入类的语言不同,在Python中导入的是模块或模块属性。


(1)模块名称空间

        名称空间是Python非常重要的一个概念,所谓名称空间,其实指的是一个名称到对象的关系映射集合。可以因为每个模块都定义了它自己的唯一的名称空间,所以不同模块间不会出现名称交叉现象,通过句点属性的访问方式,即使两个模块里有相同名称的变量,由于模块名称的不同,也不会发生名称冲突。


(2)搜索路径和路径搜索

        模块的导入(使用import语句)需要一个叫做“路径搜索”的过程,即在文件系统“预定义区域”中查找要导入的模块文件,而这些预定义区域其实是Python搜索路径的集合,这里需要注意下面两个概念:

  • 路径搜索:指查找某个文件的操作,是动词

  • 搜索路径:需要查找的一组目录,是名词

        如果模块名称不在搜索路径中,就会触发ImportError异常:

>>> import mymodules
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mymodules

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

  • 设置环境变量PYTHONPATH

  • 在sys.path中添加搜索路径

        启动Python解释器后,搜索路径会被保存在sys模块的sys.path变量中:

>>> import sys
>>> sys.path
[‘‘, ‘/usr/local/lib/python2.7/dist-packages/pip-8.0.2-py2.7.egg‘, ‘/usr/local/lib/python2.7/dist-packages/setuptools-3.3-py2.7.egg‘, ‘/usr/lib/python2.7‘, ‘/usr/lib/python2.7/plat-x86_64-linux-gnu‘, ‘/usr/lib/python2.7/lib-tk‘, ‘/usr/lib/python2.7/lib-old‘, ‘/usr/lib/python2.7/lib-dynload‘, ‘/usr/local/lib/python2.7/dist-packages‘, ‘/usr/lib/python2.7/dist-packages‘, ‘/usr/lib/python2.7/dist-packages/PILcompat‘, ‘/usr/lib/python2.7/dist-packages/gtk-2.0‘, ‘/usr/lib/python2.7/dist-packages/ubuntu-sso-client‘]

        返回的是一个列表,第一个元素表示的是当前目录。可以通过向这个列表添加元素(使用append或insert)来增加搜索路径:

>>> import my
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named my
>>> sys.path.append(‘/home/xpleaf/test‘)
>>> import my

        如果有多个相同的模块名称,Python解释器会使用沿着搜索路径顺序找到的第一个模块。

        另外使用sys.modules可以找到当前导入了哪些模块和它们来自什么地方,如下:

>>> sys.modules
{‘copy_reg‘: <module ‘copy_reg‘ from ‘/usr/lib/python2.7/copy_reg.pyc‘>, ‘sre_compile‘: <module ‘sre_compile‘ from ‘/usr/lib/python2.7/sre_compile.pyc‘>,...}

        可以看到,与sys.path不同,sys.modules返回的是一个字典,其中key为模块的名称,键值为模块的路径。











本文出自 “香飘叶子” 博客,转载请与作者联系!

Python回顾与整理10:模块

标签:模块   python   

原文地址:http://xpleaf.blog.51cto.com/9315560/1764586

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!