第8章 复杂程序组织
模块:
包含函数或者类的Python程序
导入模块形式:
import 模块名
import 模块名 as 新名字
from 模块名 import 函数名
from 模块名 import * #导入模块中的所有代码
使用import和from导入,调用函数的不同:
使用import导入模块,模块名.函数名;使用from导入模块,直接使用函数名调用
模块位置
Windows下,默认模块的查找路径为Python的安装目录及几个子目录
Linux下木默认模块查找路径为/usr/lib、/usr/lib64及其它们的几个子目录下
指定模块的位置:
import sys
sys.path.append('E:\module')
Python中被作为模块引用的.py文件会被编译成.pyc文件
可以收手工编译.py文件:
import py_compile
py_compile.compile('a8_2.py')
具有独立运行能力的模块
在Python中,如果程序作为模块被导入,则其__name__属性被设置为模块名。
如果程序独立运行,则其__name__属性被设置为"__main__".
因此可以通过__name__属性来判断程序的运行状态
编写程序作为模块导入,可以将模块的主要功能以实例的形式放在if语句中,可以方便测试模块是否能正常运行
形式:
if __name__=='__main__':
m_t_pr() #调用模块中的函数
print(name) #访问模块中的变量
包:有效避免名字冲突
包其实是包含__init__.py文件的目录
例:在主程序中调用handle包中的index.py模块中的hdl函数,可以使用三种方法导入:
import handle.index 导入后调用handle.index.hdl()
from handle import index 导入后调用index.hdl()
from handle.index import hdl 导入后调用hdl()
包中模块相互引用:
例:
grnd/
__init__.py
prnta
__init__.py
suba.py
sub
__init__.py
sona.py
prntb
__init__.py
subb.py
subc.py
1.同一包下,subb.py要调用subc.py中代码:import subc
2.调用子包中的模块,suba.py调用sona.py中代码:from .sub import sona
3.调用同级别包中的另一模块,必须从该包的上级开始导入,subb.py调用suba.py中代码:from grnd.prnta import subc
标准库
random
random.random() #随机生成0-1中的数
random.randint(0,10) #随机生成0-10中的整数
random.choice((1,2,3,4)) #列表中随机返回元素
random.shuffle(alst) #对列表alst随机乱序
日期与时间类:calender、datetime、time
time.time() #获取初始时间至现在的秒数
datetime.datetime.now() #获取本地的日期/时间
datetime.datetime.utcnow() #获取当前的UTC日期/时间