Python3-模块、包的使用
1. 模块介绍
模块是一个包含所有事先定义好的函数和变量的文件,其后缀名是.py。
模块可以被别的程序引入,以使用该模块中的函数等功能。
通俗一点说:模块就是py脚本,里面有定义好的函数和变量,可以在其他py程序中调用模块中的函数和变量。
import sys
print(sys.argv) # py程序路径列表
print(sys.path) # python可执行程序路径列表
关于具体如何导入模块或导入模块中的函数、变量的方法,之前的博客有介绍,这里就不重复讲述了。
2. __name__属性
# filename:test
if __name__ == '__main__':
print('程序自身在运行')
else:
print('我来自另一模块')
每个模块都有一个__name__
属性,当其值是'__main__'
时,表明该模块自身在运行,否则是被引入。
可以使用该属性判断这个模块运行在test.py还是在其他程序。
3. dir()函数
函数 dir() 可以找到模块内定义的所有函数或变量的名称。以一个字符串列表的形式返回。
作用在于:如果不知道这个模块有哪些函数或变量,可以通过dir()函数查看下。
import test, sys, math
print(dir(test))
print(dir(sys))
print(dir(math))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '__unraisablehook__', '_base_executable', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_enablelegacywindowsfsencoding', '_framework', '_getframe', '_git', '_home', '_xoptions', 'addaudithook', 'api_version', 'argv', 'audit', 'base_exec_prefix', 'base_prefix', 'breakpointhook', 'builtin_module_names', 'byteorder', 'call_tracing', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_origin_tracking_depth', 'getallocatedblocks', 'getdefaultencoding', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'platlibdir', 'prefix', 'pycache_prefix', 'set_asyncgen_hooks', 'set_coroutine_origin_tracking_depth', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'unraisablehook', 'version', 'version_info', 'warnoptions', 'winver']
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
4. 标准模块
Python 本身带着一些标准的模块库。如sys、math模块。
5. 包
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。
每个模块都是一个.py
文件,如a.py
包可以看作是包含__init__.py
模块的文件夹。
从关系上看如下图:
①p1
是一个包,包含必需的__init__.py
模块,还包含p10
、p11
两个子包和t1
模块。
②p10
这个子包,包含必需的__init__.py
模块和t1000
模块。
③p100
这个子包,包含必需的__init__.py
模块,就没有其他模块。
- 导入包里面的某个模块:如导入t1000模块,
import p1.p10.p100.t1000
,在调用t1000
模块内的函数或变量时要带上模块名。【 import 后必须是子包或模块】 - 导入包里面的某个模块:
from p1.p10.p100 import t1000
,在调用t1000
模块内的函数或变量时要带上模块名。【 import 后必须是子包或模块】 - 导入模块内的某个函数fun_name:
from p1.p10.p100.t1000 import fun_name
,这时可以直接使用该函数。 from package import *
:在使用这种形式导入模块时,会将一个包下面所有的子模块都导入。不建议使用此种方式。
导入语句遵循如下规则:如果包定义文件__init__.py
存在一个叫做__all__
的列表变量,那么在使用from package import *
的时候就把这个列表中的所有名字作为包内容导入。
6. 常用python标准库(模块)概述
接口名 | 导入模块 |
---|---|
操作系统接口 | import os |
管理文件和目录 | import shutil |
文件通配符 | import glob |
命令行参数 | import sys |
字符串正则匹配 | import re |
数学符号 | import math |
随机数工具 | import random |
访问互联网 | urllib.request |
发送邮件 | import smtplib |
日期和时间 | from datetime import date |
数据压缩 | import zlib gzip bz2 zipfile tarfile |
性能度量 | from timeit import Timer |
测试模块 | import doctest unittest |
可以在安装目录下的Lib
目录下查看各个模块的源文件。