系统模块 sys
此模块都是运行时系统的信息
sys模块的变量
变量 描述
sys.path 模块搜索路径 path[0] 是当前脚本程序的路径名,否则为 ''
sys.modules 已加载模块的字典
sys.version 版本信息字符串
sys.version_info 版本信息的命名元组
sys.platform 操作系统平台名称信息
sys.argv 命令行参数 argv[0] 代表当前脚本程序路径名
sys.copyright 获得Python版权相关的信息
sys.builtin_module_names 获得Python内建模块的名称(字符串元组)
标准输入输出时会用到
sys.stdin 标准输入文件对象,多用于input()
sys.stdout 标准输出文件对象,多用于print()
sys.stderr 标准错误输出文件对象, 用于输出错误信息
sys模块的方法
函数名 描述
sys.exit([arg]) 退出程序,正常退出时sys.exit(0)
sys.getrecursionlimit()
sys.getrecursionlimit() 得到递归嵌套层次限制(栈的深度)
sys.setrecursionlimit(n) 得到和修改递归嵌套层次限制(栈的深度)
自定义模块
import 语句搜索模块的路径顺序
1. 搜索程序运行时的路径(当前路径)
2. sys.path 提供的路径
3. 搜索内置模块
在当前程序运行路径
sys.path列表内
1.将自定义模块放入已有的路径内
2.给path列表添加新路径:
import sys
sys.path.append('自定义模块路径')
模块的作用域:
l模块内的变量不能被其他模块赋值改变
l模块内使用的变量也不能被其他模块赋值改变
模块的加载过程:
在模块导入时,模块所有语句会执行
如果一个模块已经被导入,则再次导入时不会重新执行模块内的语句
模块的重新加载
import mymod
import imp
imp.reload(mymod) # 在运行时重新加载mymod 模块
模块被导入和执行的过程:
1. 先搜索相关路径找模块(.py文件)
2. 判断是否有此模块对应的.py文件,如果.pyc文件比.py文件新,则直接加载.pyc文件
3. 否则用模块.py 文件生成.pyc并加载执行
pyc模块的编译 compile
编译 解释执行
mymod.py -----> mymod.pyc -------> python3
模块的文档字符串
模块内第一个没有赋值给任何变量的字符串为文档字符串
模块的__doc__属性:
用于绑定模块文档字符串
__file__ 属性
绑定模块对应的文件路径
__name__ 属性
__name__属性用来记录模块的自身的名字
作用:
1. 记录模块名
2. 判断是否为主模块
说明:
1. 当此模块作为主模块(也就是第一个运行的模块)运行时,__name__绑定'__main__'
2. 当此模块不是主模块时,__name__绑定模块名(文件名去掉.py后缀)
模块的__all__列表
模块中的 __all__ 列表是一个用来存放可导出属性的字符串列表
作用:限定当用from xxx import * 语句导入时,只导入 __all__ 列表内的属性
模块的隐藏属性
模块中以'_' 开头的属性,在from xxx import * 导入时将不被导入,通常称这些属性为隐藏属性
随机模块 random
作用:用于模拟或生成随机输出的模块
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[, random]) 随机指定序列的顺序(乱序序列)
R.sample(seq,n) 从序列中选择n个随机且不重复的元素
R.getrandbits(nbit) 以长整型的形式返回用nbit位来表示的随机数
R.seed(a=None) 用给定的数a设置随机种子,不给参数a则用当前时间设置随机种子
练习:猜数字游戏:随机生成一个0~100的整数,用变量x绑定,让用户输入一个数y,输出猜数字的结果.
1) 如果y等于x,则提示"恭喜您猜对了!", 退出程序
2) 如果y大于x,同提示"您猜大了"
3) 如果y小于x,同提示"您猜小了"
让用户循环输入,直到猜对为止,同时显示用户猜数字的次数后退出程序
包(模块包) package
包是将模块以文件夹的组织形式进行分组管理的方法
作用:
将一系列模块进行分类管理,有利于访问命名冲突
可以在需要时加载一个或部分模块,而不是全部模块
包示例:
mypack/
__init__.py
menu.py
games/
__init__.py
contra.py
supermario.py
tanks.py
office/
__init__.py
excel.py
word.py
powerpoint.py
创建命令:
mkdir mypack
cd mypack
touch __init__.py menu.py
mkdir games office
cd games
touch __init__.py contra.py supermario.py tanks.py
cd ../office
touch __init__.py excel.py word.py powerpoint.py
__init__.py 文件
__init__.py 是常规包内必须存在的文件
__init__.py 会在包加载时被自动调用
作用:
编写此包的内容
在内部填写包的文档字符串
包的导入语法:
# 同模块的导入规则相同
import 包名 [as 包别名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名[as 属性新名]
from 包名 import *
from 包名.子包名 import *
...
练习:
1. 模拟'斗地主'发牌 牌共54张 花色:黑桃('\u2660'), 梅花('\u2663'), 方块('\u2665'), 红桃('\u2666')大小王 数字:A0~10JQK
1) 生成54张片
2) 三个人玩牌,每人发17张,底牌留三张
输入回车, 打印第1个人的17张牌
输入回车, 打印第2个人的17张牌
输入回车, 打印第3个人的17张牌
输入回车, 打印3张底牌