Python|学习笔记(六)- 模块

Python学习笔记系列

Posted by Jack on January 7, 2015

前言

本篇是Python学习笔记系列的第(六)篇,主要介绍了模块相关的知识。

模块(Module)

在Python中,一个.py文件就称为一个模块。

举个例子,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。

使用模块的好处
  1. 提高代码的可维护性
  2. 提高代码的复用性
包的概念

为了避免模块名的冲突,Python引入了按目录组织模块的方法,称为包(package)。

现在,假设我们的abcxyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mushank,按照如下目录存放:

mushank
├─ __init__.py
├─ abc.py
└─ xyz.py

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mushank.abc,类似的,xyz.py的模块名变成了mushank.xyz

__init__.py文件

每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mushank

⚠️注意亮点:

  • 模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
  • 模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。

使用模块

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'

import sys

# Do sth

第1行和第2行是标准注释,在本系列的第一篇文章《第一个Python程序》已经讲过,不再赘述。

第4行的字符串表示文档注释,任何模块代码的第一个字符串都被视为该模块的文档注释。

第6行使用__author__变量把作者写进去。

以上就是Python模块的标准文件模版,当然如果你不想写,那也没人强迫你这么做。

第8行是导入模块,比如sys等系统模块,可以直接使用import导入使用。

作用域

在一个模块中,我们可以定义很多函数和变量。在Python中,我们使用前缀_来区分私有/公开。

  • 正常的函数名/变量是公开的(Public),可以直接被引用;
  • 类似__xxx__这样的是特殊函数/变量,可以被直接引用,但是有特殊用途;
  • 类似_xxx__xxx这样的函数/变量,是非公开的(Private),不该被直接引用。

安装第三方模块

在Python中,安装第三方模块,可以通过包管理工具pip来完成。

在命令行窗口运行pip,如果提示未找到命令,就说明没安装。具体安装方法,百度or谷歌自行选择哈。

安装完成后,使用pip install moduleName命令即可安装指定名称的模块。

⚠️注意:Mac或Linux上有可能并存Python 3.x和Python 2.x,因此对应的pip命令是pip3

模块搜索路径

当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错。

默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:

>>> import sys
>>> sys.path
['', '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

如果我们要添加自己的搜索目录,可以直接修改sys.path,添加要搜索的目录:

>>> import sys
>>> sys.path.append('/Users/mushank/my_py_scripts')

这种方法是在运行时修改,运行结束后失效。