模块 Module
模块是一个包含有一系列数据,函数,类等组成的程序组
模块是一个文件,模块文件名通常以.py结尾
作用:
让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰
模块中的数据,函数和类等可提供其他模块或程序使用
模块的分类:
内置模块(builtins),在解析器的内部可以直接使用
标准库模块,安装python时已安装且可直接使用
第三方模块(通常为开源),需自己安装
用户自己写的模块,可以作为其它人的第三方模块
模块的导入语句
import 语句
语法: import 模块名1 [ as 模块新名1] [, 模块名2][ as 模块新名2] ,…
作用:将某模块整体导入到当前模块
用法:模块 . 属性名
dir(obj)
函数返回模块所有属性的字符串列表
help(obj)
可以直接查看模块相关的文档字符串
from import语句
语法:
from 模块名 import 模块属性名1 [ as 模块属性新名1] ,模块属性名2 [ as 模块属性新名2]
作用:将某模块内的一个或多个属性导入到当前模块的作用域
from 模块名 import * 语句
作用:将某模块的所有属性都导入到当前模块
dir
函数:
dir
([对象]) 返回一个字符串列表
作用:
如果没有参数调用,则返回当前作用域内的所有变量的列表
如果给定一个对象作为参数,则返回这个对象的所有变量的列表
1.对于一个模块,返回这个模块的全部属性
2.对于一个类对象,返回类对象的所有变量,且递归基类对象的所有变量
3.对于其他对象,返回所有的变量,类变量,基类变量
math()
常用函数:
math.e
自然对数的底
math.pi
圆周率pi
math. cell(x)
对x向上取整,比如x = 1.2,返回2
math. floor(x)
对x向下取整,比如x = 1.2,返回1
math. sqrt(x)
返回x的平方根
math. factorial(x)
返回x的阶乘
math. log(x [ , base ] )
返回以base为底x的对数,如果不给出base,则以e为底
math. log10(x)
求以10为底x的对数
math. pow(x,y)
返回x**y
(x的y次方)
math. fabs(x)
返回浮点数x的值
角度和弧度degrees互换
math.degree(x)
将弧度x转化为角度
math. radians(x)
将角度x转化为弧度
math. sin(x)
返回x的正弦(x为弧度)
math. cos(x)
返回x的余弦(x为弧度)
math. asin(x)
返回x的反正弦(返回值为弧度)
time 时间模块
此模块提供了时间相关的函数,且一直可用
计算机元年:1970年1月1日0时
UTC
时间,不会因时区问题而产生错误
CST -28880
time函数:
time.time()
返回计算机元年至当前时间的描述的浮点值(UTC
时间为准)
time.sleep(secs)
让程序按给定秒数的浮点数水面一段时间
time.gmtime([secs])
用给定秒数转换为用UTC
表达的时间元组(缺省返回当前时间元组)
time.asctime([tuple])
将时间元组转换为日期时间字符串
time.mktime(tuple)
将本地日期时间元组转换为新纪元秒数时间(UTC
时间为准)
time.localtime([secs])
将UTC
秒数时间转换为日期元组(以本地时间为准)
系统模块 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.exit(0)
直接退出程序的执行
sys.getrecursionlimit()
得到递归嵌套层次限制(栈的深度)
sys.setrecursionlimit(n)
得到和修改递归嵌套层次限制(栈的深度)
自定义模块
自定义的模块名必须符合‘标识符’的命名规则(同变量名)
模块有各自独立的作用域
模块化编程的优点:
有利于多人合作开发
使代码更容易维护
提高代码的复用率
有利于解决变量名冲突问题
import语句搜索模块的路径顺序
1.搜索程序运行时的路径(当前路径)
2.sys.path
提供的路径
3.搜索内置模块
sys.path
是一个存储模块搜索路径的列表
1.可以把自定义的模块放在相应的路径下可以导入
2.可以把自己模块的路径添加在sys.path
列表中
模块的加载过程:
1.在模块导入时,模块的所有语句都会执行
2.如果一个模块已经导入,则再次导入时不会重新执行模块内的语句
模块的重新加载:
import mymod()
import imp
专门进行模块管理的模块
imp.reload(mymod)
# 重新加载模块
模块被导入和执行的过程:
1.先搜索相关的路径找模块(.py)
2
.判断是否有此模块对应的.pyc
文件,如果存在.pyc
文件且比.py
文件新,则直接加载.pyc
文件
3.否则用.py
文件生成.pyc
后在进行加载
pyc
模块的编译文件
mymod。py-
-(编译)—> mymod.pyc
—(解释执行)—> python3
模块的属性
属性的实质是变量(是模块内的全局变量)
模块内预置的属性
doc属性 用来绑定模块的文档字符串
模块内第一个没有赋值给任何变量的字符串为模块的文档字符串。
file属性 绑定模块对应的文件路径名
1.对于内建模块,不绑定路径
2.对于其他模块,绑定路径名的字符串
name属性 用来记录模块的自身名字
作用: 1.用来记录模块名 2. 用来判断是否为主模块(最先运行的模块)
说明: 当此模块为主模块时,__name__
绑定’__main__’
当此模块不是主模块时,此属性绑定模块名
模块的__all__列表
模块中的__all__
列表是一个用来存放可导出属性的字符串列表
作用: 当用 from import *
语句导入时,只导入__all__
列表内的属性
模块的隐藏属性
模块中以 ’_’开头的属性,在from import * 语句导入时,将不被导入,通常称这些属性为隐藏属性。
随机模块 random
作用:用于模拟和生成随机输出的模块
import random as R
常用函数:
R.random()
返回一个[ 0, 1)之间的随机实数
R.uniform(a,b)
返回[ a,b)区间内的随机实数
R.randrange([ strat ,] stop [ , step ])
返回range()中的随机数
R.choice(seq)
从序列中返回随意元素
R.shuffle(seq [ , random])
随机指定序列的顺序(乱序序列)
R.sample(seq,n)
从序列中选择n个随机且不重复的元素
R.getrandbits(nbit)
以长整型的形式返回nbit
位来表示的
R.seed(a = None)
用给定的数a设置随机种子,不给参数a则适用当前系统时间,对于相同的a,生成的数也是相同的。
包(模块包) package
包是将模块以文件夹的组织形式进行分组管理的方法
作用:将一系列模块进行分类管理,有利于防止命名冲突。可以在需要时加载一个或部分模块而不是全部模块。
示例:
`mypack/`
__init__.py # 包的指示性文件,必须存在
menu.py
games/
__init__.py
contra.py
supermario.py
tanks.py
office/
__init__.py
excel.py
word.py
__init__.py
文件
常规包内必须存在的文件
__init__.py
会在包加载时被自动调用
作用:
编写此包的内容 在内部填写文档字符串
在__init__.py
内可以加载此包所依赖的一些其它模块
包的导入:
用三条语句可以导入包(同模块的导入规则)
import 包名(as 包别名)
import 包名. 模块名(as 模块新名)
import 包名. 子包名. 模块名
from 包名 import 模块名
from 包名. 子包名 import 模块名
from 包名. 子包名. 模块名 import 属性名 [as 新属性名]
from 包名 import *
from 包名. 模块名 import *
包的__init__.py
内的__all__
列表
作用:用来记录此包中有哪些子包或模块在用from
包 import *
语句导入时是否被调导入
说明:__all__
列表只对from import *
语句起作用
包的相对导入
包的相对导入是指包内模块的相互导入
语法: from 相对路径包或模块 import 属性或模块名
或 form 相对路径包或模块 import *
相对路径: . 代表当前目录 … 代表上级目录 …代表上二级目录
注:相对导入时不能超出包的外部
包的加载路径:
同模块的加载路径相同:1.当前文件夹 2.sys.path
给出的路径