模块(Module)
Python中,一个.py文件就称之为一个模块,大大提高了代码的可维护性。当一个模块编写完毕,就可以被其他地方引用。
安装第三方模块
是通过包管理工具pip完成的(如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了,Mac或Linux上有可能并存Python 3.x和Python 2.x,因此对应的pip命令是pip3)
pip install Pillow
Anaconda一个基于Python的数据处理和科学计算平台,内置了许多非常有用的第三方库,装上Anaconda,相当于把数十个第三方模块自动安装好了,非常简单易用
模块搜索路径
试图import一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错:搜索路径存放在sys模块的path变量中
如果要添加新的目录,两种方法:
- 直接修改sys.path,如sys.path.append('/Users/michael/my_py_scripts')
- 第二种方法是设置环境变量PYTHONPATH
使用包(Package)来组织模块
相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突,但是也要注意,尽量不要与内置函数名字冲突
使用包则如下目录存放:init.py的文件必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包
mycompany ├─ init.py
├─ abc.py
└─ xyz.py
创建自己的模块时,要注意:
- 模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
- 模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块
使用模块
代码语言:python代码运行次数:0复制#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module ' #一个字符串,表示模块的文档注释
__author__ = 'Michael Liao' #__author__变量把作者写进去
import sys
def test():
args = sys.argv #sys模块有一个argv变量,用list存储了命令行的所有参数
if len(args)==1:
print('Hello, world!')
elif len(args)==2:
print('Hello, %s!' % args[1])
else:
print('Too many arguments!')
if __name__=='__main__':
test()
当我们在命令行运行hello模块文件时,Python解释器把一个特殊变量name置为main,而如果在其他地方导入该hello模块时,if判断将失败,因此,这种if测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试
作用域
一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用
公开函数/变量
正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等
类似xxx这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的author,name就是特殊变量,hello模块定义的文档注释也可以用特殊变量doc访问,我们自己的变量一般不要用这种变量名;
非公开函数/变量:_xxx和__xxx
类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用;原则上是不被引用的但是不代表不能引用,强制掉用私有函数也是可以用的