1、加载模块#
模块简单来说是用来定义函数、类、变量的python脚本文件。
模块的分类
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#查看python解释器默认的寻找目录
import sys, pprint, os
pprint.pprint(sys.path)
['',
'/home/shensuo/miniconda3/lib/python38.zip',
'/home/shensuo/miniconda3/lib/python3.8',
'/home/shensuo/miniconda3/lib/python3.8/lib-dynload',
'/home/shensuo/miniconda3/lib/python3.8/site-packages']
##注意第一个空字符应该表示当前路径
#os.system("ls /home/shensuo/miniconda3/lib/python3.8")
#如果是自建模块,需要将模块放到上面的路径之一,或者再另添加新的路径(如下代码)
sys.path.append("/home/shensuo/python")
|
- 根据组成不同:可分为简单模块和包两类,二者在加载时有一定的区别
(1)简单模块:就是一个python脚本,里面定义了若干函数等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#加载方式1:加载模块,使用具体某个函数时-- module.function
import copy
copy.deepcopy()
import copy as cp #模块重命名
cp.deepcopy()
#加载方式2:加载模块的所有函数,使用具体某个函数时,直接交代函数名
from copy import *
deepcopy()
#加载方式3:仅加载模块的指定函数
from copy import deepcopy
from copy import deepcopy as dpc #函数重命名
|
(2)包package:将多个py脚本组织在一个目录下;可以有多层,每一层都需要有一个__init__
文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#包可以理解为复杂的模块,如下创建了具有两层结构的简单的包
tree package/
# package/
# ├── __init__.py
# ├── mod1.py
# └── subpack
# ├── __init__.py
# └── mod2.py
#加载第一层
##(1)
#from package import * #第一层的所有模块
from package import mod1 #第一层的指定模块
mod1.print1()
##(2)
import package.mod1
package.mod1.print1()
##(3)
from package.mod1 import print1
print1()
#加载第二层
##(1)
from package.subpack import mod2 #第二层的指定模块
mod2.print2()
##(2)
import package.subpack.mod2
package.subpack.mod2.print2()
|
作为包的文件结构中必须包含 __init__.py
文件。它可以仅仅是空白文件,但必须要有,暂且不提。
2、探索模块#
(1)dir()
: 可列出对象的所有属性。对于模块来说,列出所定义的函数、类、变量
1
2
3
4
5
6
7
|
#需要先加载
import copy
dir(copy)
#以下划线开头的,并非给外部使用
[n for n in dir(copy) if not n.startswith("_")]
## ['Error', 'copy', 'deepcopy', 'dispatch_table', 'error']
|
(2)__all__
: 模块自定义变量。返回一个列表,包含for module import *
语句所加载的函数
1
2
3
4
|
#需要先加载
import copy
copy.__all__
## ['Error', 'copy', 'deepcopy']
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#需要先加载
import copy
##(1)help()
help(copy) #模块的帮助信息
help(copy.copy) #函数的帮助信息
##(2)__doc__
print(copy.__doc__) #模块的文档
print(copy.copy.__doc__) #函数的文档
##(3)__file__
print(copy.__file__) #查看模块的源代码文件储存路径
|