概述
模块简述
Python__name__
模块优点
- 提高了代码的可维护性
- 提高了代码的服用度, 当一个模块完毕, 可以被多个地方引用
- 可避免函数名和变量名的冲突
- argv : 获取命令行参数的列表
- import sys 引入 python 标准库中的 sys.py 模块
- import : 这是引入一个模块的方法(后面会提到)
- sys.path : 包含了一个 Python 解释器自动查找所需模块的路径的列表
自定义模块
- Python 中不但可以使用第三方模块和系统模块, 同时我们还可以使用自定义模块,
- 在 Python 中一个 .py 文件就是一个模块
- 下面是我自定义的一个 Titan.py 模块, 代码如下
需要注意的是:
- 一个模块只会被导入一次,不管你执行了多少次 import , 可以防止模块被重复引用
- 引入任何模块时(包括自定义模块), 不用加 .py 后缀
- 当我们使用 import 语句的时候, Python 解释器是怎样找到对应的文件的呢?
- 这就涉及到 Python 的搜索路径,搜索路径是由一系列目录名组成的, Python 解释器就依次从这些目录中去寻找所引入的模块。
- 这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。
- 搜索路径是在 Python 编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在 sys 模块中的 path 变量
使用示例
需要注意的是:
这种方式, 可能会导致和本文件中定义的方法或者变量重名, 这里需要注意
from…import* 方式
把一个模块中所有的内容, 全部倒入当前命名空间, 但是最好不要过多地使用
# 格式:from modname import *# 使用:from Titan import *sayGood()print(age)
模块内置属性和函数
__name__ 属性
.py__name__if __name__ == '__main__': print('这是Titan模块')else: def sayGood(): print('good') def sayNice(): print('nice') def sayBad(): print('bad') age = 20 name = 'titan'
- name 和 main 前后都是双下划线
- 每一个模块中都有一个 __name__ 属性, 当其值等于 __main__ 时, 表明该模块自身在执行, 否则被引入了其他文件
- 当前文件如果为程序的入口文件, 则 __name__ 属性的值为 __main__
dir() 函数
dir()dir()import Titanprint(dir(Titan))# 输出结果:['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'age', 'name', 'sayBad', 'sayGood', 'sayNice']print(dir())# 输出结果:['Titan', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']# 这里定义一个新的变量sum = 30print(dir())# 输出结果:['Titan', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'sum']# 把定义的变量删除后del sumprint(dir())# 输出结果:['Titan', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
包
这里我们先思考这样一个问题: 在同一个项目中有两个或两个以上的开发者分别定义了相同名字的模块(当然狮子啊不同的目录中, 同一个目录下不可能创建出相同名字的文件), 那么模块该如何调用
解决
- 为了解决上述模块命名的冲突, 引入了按照目录来组织模块的方法, 成为包
- 包是一种管理 Python 模块命名空间的形式,采用"点模块名称"
- 引入包以后, 只要顶层的包不与其他人的发生冲突, 那么模块就都不会与别人的发生冲突
- 所谓顶层的包指的是上一层的文件目录
- 同一个包可以包含多个模块
- 例如: 名为 A.B 的模块表示了名为 A 的包中名为 B 的子模块
需要注意的是:
在每一个包内(模块的同级目录下)必须要创建一个名为 __init__.py 的文件, 主要是为了避免一些滥竽充数的名字, 目前该文件内可以什么都不用写, 如图所示:
调用方法
import a.Titanimport b.Titanimport b.codera.Titan.sayGood()b.Titan.sayGood()b.coder.sayGood()# 输出结果:good--agood--bgood--coder
安装使用第三方模块
pip 简介
- 在 Python 中第三方库是通过 pip 安装和管理的, pip 就像 iOS 中的 pod 一样, 负责安装和管理第三方库
- 在 Mac 和 Linux 系统中 pip 是默认安装过的, 一般无需重新安装, 如有问题, 请自行百度解决
- 在 Mac 系统中会有一个默认的 Python2.7 版本的, 我自己安装了一个3.6的版本, 自然默认也安装了 pip
- 下面是一些 Python3.6 中 pip 的命令, 这里需要以 pip3 为命令头执行
# 查看当前pip版本pip3 -V# 安装第三方库pip3 install ...# 对pip进行升级pip3 install --upgrade pip3
安装第三方库
- Mac 系统安装第三方库, 直接打开终端执行安装命令即可
- Pillow 已经是 Python 平台事实上的图像处理标准库了
- PIL 功能非常强大,但 API 却非常简单易用
pip3 install Pillow
第三方模块的使用
操作图像
下面是最常见的图像缩放操作示例代码
from PIL import Image# 打开一个jpg图像文件,注意是当前路径:im = Image.open('titan.jpg')# 获得图像尺寸w, h = im.sizeprint('image size: %sx%s' % (w, h))# 缩放到50%:im.thumbnail((w//2, h//2))print('image to: %sx%s' % (w//2, h//2))# 把缩放后的图像用jpeg格式保存:im.save('jun.jpg', 'jpeg')
其他功能如切片、旋转、滤镜、输出文字、调色板等一应俱全, 代码如下:
from PIL import Image, ImageFilter# 打开一个jpg图像文件,注意是当前路径:im = Image.open('jun.jpg')# 应用模糊滤镜:im2 = im.filter(ImageFilter.BLUR)im2.save('jun1.jpg', 'jpeg')
閱讀更多 繁華落盡and曲終人散 的文章