第五章-模块
在Python中一个py文件就可以被称为模块(Module)
由于写的模块越来越多, 模块名重复的几率越来越大, Python又引入了按目录来组织文件的方法, 也就是包(Package)
引入了包之后, 模块的名称就变成了 包名.模块名
Package的目录结构中, 每个目录下要存放一个__init__.py的文件, 否则该目录就会被当成普通目录. __init__.py本身就是一个模块, 模块名就是目录名
1 使用模块
1.1 模块其实是一个py文件
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
__author__ = 'Michael Liao'
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('Too many arguments!')
if __name__=='__main__':
test()
第一行和第二行是标准的python注释
第四行是一个字符创, 表示模块的文档注释, 任意模块代码的第一个字符串都被视为模块的文档注释, 此内容可以通过__doc__来访问
第六行的__author__是作者信息
这就是标准的模板的结构
第八行表示导入sys模块, 导入之后就可以使用变量sys. sys模块里面有一个参数是argv, 它获取到了命令行的输入, 返回list类型, 第一个元素是文件名, 后面是写入的参数
第十九行的__name__只有在运行该函数的时候才会赋值为__main__
1.2 导入模块
导入模块有两种方法
方法一:
import 模块名字
这样的导入方法以后使用函数需要
模块名字.函数名字
方法二:
from 模块名字 inport 函数名字
这样就直接导入了某个函数, 使用的时候直接使用函数名就可以了
1.3 导入自己写的模块
由于模块就是一个py文件, 可以自定义一个文件自己来导入
其中import的时候会执行一遍模块文件
如下的test.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'weihuchao'
def getMax(mList):
print("getMax")
return max(mList)
print("hello test")
如下是导入test模块的代码
import test
maxValue = test.getMax([24,3,26,9,33])
print(maxValue)
结果为
hello test
getMax
33
2 私有变量
之前遇见过得__author__等是特殊的变量, 与此类似的还有_变量名的变量, 这种变量表示私有变量, 只能在模块内部使用.
尽管在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 安装第三方模块
在Python中安装第三方的模块是通过包管理工具pip来完成的
安装图片处理工具Python Imaging Library
pip install Pillow
生成缩略图
>>> from PIL import Image
>>> im = Image.open('test.png')
>>> print(im.format, im.size, im.mode)
PNG (400, 300) RGB
>>> im.thumbnail((200, 100))
>>> im.save('thumb.jpg', 'JPEG')
其余还有MYSQL的驱动 mysql-connector-python, 用于科学计算的NumPy库 numpy, 用于生成文本的模板工具Jinja2
4 模块搜索路径
使用import导入模块的查找的顺序如下:
当前目录-->所有已安装的内置模块-->第三方模块
搜索路径在sys的path里
>>> import sys
>>> sys.path
更改搜索目录的方法有两种
第一种: 直接修改sys.path
>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')
第二种: 修改环境变量PYTHONPATN