模块
在Python中,一个.py文件就称之为一个模块(Module)
- 使用模块的好处:提高了代码的可维护性;当一个模块编写完毕,就可以被其他地方引用;使用模块还可以避免函数名和变量名冲突
- 为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。即该“包”目录的包名不与别人冲突,那该包目录下的所有.py文件的模块名字都不会和别人冲突。
- 如:顶层包名为mycompany,其中含有模块如下图所示:
此时abc.py模块的名字就变成了mycompany.abc,依此类推。- 同时还可以有多级目录,组成多级层次的包结构,如下图所示:
其中www.py的模块名为mycompany.web.www
自己创建的模块不能和Python自带的模块名称冲突
- python的内置函数
总结
- 模块是一组Python代码的集合,可以使用其他模块,也可以被其他模块使用。
- 创建自己的模块时,要注意:
- 模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
- 模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。
使用模块
应用
以内建的sys门票快为例,编写一个moduletest的模块:
#!/usr/bin/env python3 # 可以让这个moduletest.py文件直接在Unix/Linux/Mac上运行
# -*- coding: utf-8 -*- # 表示.py文件本身使用标准UTF-8编码
'a test module' #模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释
__author__='Yummy Lee' #写入作者
import sys # 使用sys模块的第一步是导入该模块
def test():
args=sys.argv #sys的argv变量,用list存储了命令行的所有参数
# argv至少有一个元素,因为第一个参数永远是该.py文件的名称
if len(args)==1:
print('hello,world!')
elif len(args)==2:
print('hello,%s' % args[1])
else:
print('too many arguments!')
if __name__=='__main__': # 在命令行运行moduletest这个模块文件时,python解释器把一个特殊变量__name__置为__main__
test()
a.python解释器中运行:
- argv至少有一个元素,因为第一个参数永远是该.py文件的名称:
- 在python解释器中运行python3 moduletest.py获得的sys.argv就是[‘moduletes.py’]
- 运行python3 moduletest.py Michael获得的sys.argv就是[‘moduletest.py’, 'Michael]
b.python交互环境中调用 - 启动交互环境,导入moduletest模块:
import moduletest
- 执行test()函数
作用域
Python中,是通过_前缀来表示作用域
- 正常函数和变量名—公开—直接被引用:abc,x123
- 特殊变量__xxx__ —可用于文档注释:__author__ , __name__
- 变量_xxx,__xxx —非公开—如_abc,__abc等
- 可以将外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public
安装第三方模块
- 在Python中,安装第三方模块,是通过包管理工具pip完成的。
- Mac或者Linux用户可以跳过安装pip这一步骤
- 查找是否安装pip:命令行输入
pip
说明我的电脑已经安装了pip
- 安装Pillow命令:
pip install Pillow
安装常用模块
常用模块有:
- Pillow
- MySQL驱动程序
- Web框架Flask
- 科学计算Numpy等
可以直接使用Anaconda(一个基于Python的数据处理和科学计算平台)安装,包含以上所有的第三方模块,下载时进入Anaconda官网下载即可。
模块搜索路径
- 默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:
import sys
sys.path
- 如果我们要添加自己的搜索目录,有两种方法:
- method1:直接修改sys.path,添加要搜索的目录
import sys
sys.path.append('/Users/Ming/my_py_scripts')
运行时修改,运行结束后失效
- methor2:设置环境变量
PYTHONPATH
,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。