常用模块里面还有很多,就不一一介绍了,比如:functools
里面的偏函数partial
这个我们下次讲闭包相关知识会说的functools.partial(函数名, 默认参数1,默认参数2...)
8.第三方模块安装¶
第三方模块安装之前有说过:https://www.cnblogs.com/dotnetcrazy/p/9095793.html
简单提一下:(pip官网)
pip install 模块名 # 正常
sudo pip install 模块名 # 没权限运行
pip install --user 模块名 # conda下的pip
貌似win下面有一个模块比较火virtualenv
,作用好像可以使得pip安装的模块不会直接安装到系统中
因为逆天是Ubuntu的,所以具体的情况我不太清楚,你可以作为扩展了解下(参考)
9.包系列(导入、发布、安装)¶
如果不同的人编写的模块名相同怎么办?
小明抢答曰:”为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)“
小张斜了一眼小明补充道:”相互间有联系功能的模块可以放在一个包里,这个包就有点像C#的文件夹和类库的概念了“
小明不服气的把小潘那段代码的开头贴了出来:import matplotlib.pyplot as plt
,然后叫嚣道:”怎么样,这个肯定用到了包“
9.1.包的定义¶
课代表看着这两个活宝,然后继续讲解道:
模块是一组Python代码的集合,可以使用其他模块,也可以被其他模块使用
比如一个模块的名称是A.B
, 那么他表示一个包A
中的子模块B
刚说完,小明就得意的看着小张,然后继续听课:
创建自己的模块时,要注意:
- 模块名要遵循Python变量命名规范,不要使用中文、特殊字符
- 模块名不要和系统模块名冲突(标准库)
下面我们来一个简单的案例:
自己定义一个包,目录结构如下:(__init__.py
是空文件)
web/
├── data.py
├── __init__.py
└── json.py
调用web包里面的get_json()
方法:
from web.json import get_json
get_json()
或者:
import web.json as json
json.get_json()
每一个包目录下面都会有一个__init__.py
的文件,这个文件是必须存在的,否则Python就把这个目录当成普通目录
__init__.py
可以是空文件,编译器默认会把它认成名字是文件夹名的模块,eg:web
9.2.包的制定化 ~ 控制可使用的模块¶
还记得之前讲得__all__
吧,如果你想控制包里面的模块能否被访问使用,可以使用它
比如web包下的init文件中写下这一句:__all__ = ["json"]
神奇的事情发生了:
from web import *
json.get_json()
data.get_data()
在调用data.get_data()
的时候出现了如下错误:
NameError: name 'data' is not defined
小明想到了自己当时的那顿饭,然后用当时的思路试了下:
# 你这样调就不行了
import web
web.data.get_data()
发现和上面一样的错误,然后夸张的说道~“哈哈哈,这种方式无敌了,里面有谁能调data模块
下的get_data()方法
我就请他喝饮料!”
话刚落完,发现大家刷刷的提交了相同的代码:
# 同样的,你硬是要调,python也拿你没办法
import web.data as data
data.get_data()
小明顿时崩溃了,自我安慰到:“反正都是要请你们吃晚饭的了,也不差这饮料了...”