模块
随机模块 random
import random as R
作用:
用于模拟或生成随机输出的模块
函数:
R.random() 返回一个[0, 1) 之间的随机数
R.uniform(a, b) 返回一个(a, b) 的随机数
R.randrange([start,] stop [, step]) 返回range(start, stop, step)中的随机数
R.choice(seq) 从序列中返回随机元素
R.shuffle(seq) 随机指定序列的顺序(乱序序列)
R.sample(seq, n) 从序列中选择 n个随机且不重复的元素
系统模块 sys:
此模块可以获取或设置系统相关的数据
变量:
sys.path 模块的搜索路径
sys.version 版本信息的字符串
sys.version_info 版本信息的命名元组
sys.platfrom 操作系统平台名称信息
sys.builtin_module_names Python 内建模块的名称(字符串元组)
sys.modules 已加载模块字典
sys.argv 命令行参数, argv[0] 代表当前脚本程序路径名
在python的主模的第一行加入:
#! /usr/bin/python3
告诉调用此程序省,以下程序用 /usr/bin/python3这个文件来解释执行
示例:
见: mygame
编写mygame
添加执行权限:
$ chmod +x mygame
$ ./mygame
$ sudo cp mygame /usr/bin/
$ mygame
(以上内容不适合window操作系统)
sys模块的函数:
sys.exit() 退出程序
sys.getrecursionlimit() 得到递归的最大层数
sys.setrecursionlimit(n) 设置递归的最大层数
自定义模块:
用户自己编写模块
示例见:
和
(必须自定义模块和导入此模块的主模块一定要在同一文件夹内)
自定义的模块导入方法与内建模块相同
import xxx
from xxx import yyy
from xxx import *
模块的加载过程:
模块在第一次被加载时,所有语句都被执行,以后再将加载时,将不会再次执行模块的内的语句
模块的路径搜索顺序:
import 模块名 # 去哪儿里去找这个模块呢?
1. 搜索程序运行时的路径(当前路径)
2. sys.path 提供的路径
3. 搜索内置模块
模块化编程的优点:
1. 有利于多人合作开发
2. 使代码更易于维护
3. 提高代码的复用率
4. 模块化编程有助于解决函数名和变量名冲突(重名)问题,(模块内的变量的作用域为模块内全局)
PYTHONPATH环境变量
PYTHONPATH环境变量里的路径会在python3的解析器启动时自动加载到sys.path列表中
添加Linux/Unix环境变量:
$ export PYTHONPATH=/home/tarena/aid1711
看查Linux/Unix环境变量:
$ printenv
模块的文档字符串:
模块中,第一个没有赋值给任何变量的字符串是模块的文档字符串,在交换模式下,可以用help(模块名) 查看
模块的属性:
__name__ 属性:
作用:
1. 用来记录模块自身的名字
2. 用来判断是否为主模块
说明:
对于被导入的模块,模块名为去掉"路径前缀"和".py"后缀的文件名
对于被执行的主模块,模块名为'__main__'
__doc__ 属性:
用来记录文档字符串
__file__属性
用来记录模块的所在文件路径
模块中的 __all__ 列表
__all__ 是一个用来存入可导出属性的列表
作用:
当用from xxx import *导入时,只导入__all__列表内的属性
模块的隐藏属性
模块中以下划线'_' 开头,不以双下划线'__'结尾的变量,在from xxx import *语句导入时,将不被导入
通常称这些变量为隐藏属性
模块的加载过程:
1. 先搜索相关路径找模块(xxxx.py)
2. 判断是否有此模块对应的.pyc文件,如果.pyc文件与.py文件"新"则直接加载.pyc文件
3. 否则用模块.py文件生成.pyc文件后,再进行加载
compile execute
编译 解释执行
mymod.py --> mymod.pyc --> python3
包 package (模块包)
包是将模块以文件夹的形式组织在一起,进行分组管理的办法
包的作用:
将一系列模块进行分类管理,有利于防止命名冲突
可以在需要时加载一个或部分模块而不是全部模块
tree命令的安装
$ sudo apt install tree
$ tree
包的导入语句:
同模块的导入规则
import 语句
语法:
import 包名 [as 包别名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
...
from import 语句
语法:
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名 [as 属性新名]
...
from import * 语句
语法:
from 包名 import *
from 包名.模块名 import *
...
__init__.py 文件
__init__.py 会在包加载时自动被调用
作用:
1. 在内部填写文档字符串
2. 在__init__.py内可以加载此包所依懒的一些模块
__init__.py 内的 __all__ 列表:
作用:
用来记录此包中有哪儿些子包或模块需要在from xxx import *时被导入
说明:
此列表只有在 from import * 语句时有效
包的相对导入
包的相对导入是指包内模块的相互导入
在from xxx import 语句中可以使用相对导入
在from 和import 可以用相对路径
. 代表当前目录
.. 代表上一级目录
... 代表上二级止录
.... 以此类推
注意:
相对导入时不能超出包的外部
包的加载路径:
同模块的加载路径
sys.path 添加包的搜索路径
PYTHONPATH