模块化是现在比较流行的编程风格,一方面可以实现代码的重用,一方面可以防止命名冲突,python也不例外的使用模块化。
模块化
python的模块化就是在文件夹中添加一个 __init__.py
的模块,该模块可以为空,也可以写入自己的代码,如果不添加该文件否,则文件夹则被认为是普通的文件目录
比如:
- mycompany
__init__.py
- abc.py
- xyz.py
python中用包(package)的概念了给模块添加命名空间,所以 'abc.py' 现在就叫做 mycompany.abc
除了单层命名空间,还可以添加多层的命名空间,但是值得注意的是,每层命名空间中都需要添加 __init__.py
的模块,例如:
- mycompany
- web
__init__.py
- utils.py
- www.py
__init__.py
- abc.py
- xyz.py
- utils.py
- web
应用utils模块时,可以根据命名空间的不同来应用不同的模块,比如 mycompany.web.utils, mycompany.utils 表示的模块不一样
模块化规范
一个模块的一般写法:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'module description'
__author__ = 'james sawyer'
import sys
def test():
args = sys.argv
if len(args) == 1:
print('hello world')
elif len(args) == 2:
print('hello, %s' % args[1])
else:
print('blabla')
if __name__ == '__main__':
test()
第1行注释可以使这个文件直接在Unix/Linux/Mac上运行;第2行注释表示.py文件本身使用标准UTF-8编码;第3行表示模块的一些说明信息;第4行使用 '__' 命名规则,表示这个变量是特殊变量
私有变量和公有变量
有时候有些内部实现代码不需要被别人知道,希望它是私有的, python通过命名规范来规定私有变量,使用 __
或 _
的方式,虽然这样并不能将变量私有化,但是这是一种规范:
def _private_1(name):
return 'Hello, %s' % name
def _private_2(name):
return 'Hi, %s' % name
def greeting(name):
if len(name) > 3:
return _private_1(name)
else:
return _private_2(name)
这一点和其它语言的处理方式相似,下一章会详细的将命名规范
使用第3方包管理 -- pip
python也拥有自己的包管理,和npm类似,python使用 pip 来安装管理python包
命令行也类似,比如安装一个处理图片的包 Pillow
pip install Pillow
总结
本章主要将python的模块化,安装第3方python包,这一点和javascript基本类似
- python模块化,在目录下添加
__init__.py
模块 - 命名空间的概念
- python模块的写法规范
- 使用
pip
安装管理python包