#sys模块中常用的属性
1、version:python版本
2、version_info:返回描述python版本的元组,可以直接用于判断python版本
3、platform:操作系统版本
win10 64位下,返回字符串"win32"
4、path:python的文件搜索路径,后面会用到
5、argv:命令行调用python脚本时输入的参数,用于命令行操作时输入参数
6、builtin_module_names:内置模块的名字列表
#sys模块中的常用方法
1、exit:退出程序最安全可靠的方式,exit(0)代表正常退出;用ctrl+d可以退出,其代表读入结束;quit()也可以退出
2、getrecursionlimit:获取递归限定
3、setrecursionlimit:设定递归深度
#自定义模块并导入
1、模块名必须符合变量名命名规则,模块的文件名为:模块名.py
2、在导入自定义模块时,会导入模块的代码,然后根据代码创建变量
3、使用方法和系统内建模块使用方法完全一致
#模块路径的搜索顺序
1、当前工作路径(程序运行时所在的路径) Q:是当前工作路径呢还是源文件所在路径
2、sys.path所提供的路径
3、系统内置模块
可以调用sys.path.append()函数将模块所在路径导入到系统路径中
#模块的加载过程:模块导入时,其所有语句会执行;当重复导入时,不会重新执行模块内的语句
#重新加载模块:当加载之后修改了模块的源文件时,需要重新导入才能生效
import imp
imp.reload(module_name)
#模块的module属性
1、__name__:绑定模块名称的字符串
当此模块作为主模块时,__name__绑定'__main__';否则math.__name__ = 'math',sys.__name__ = 'sys',这些属性是系统自行生成的
可以同于判断模块是被导入还是被执行
2、__file__:绑定模块的源文件路径
3、__all__列表:存放可导出属性的字符串列表
当from xxx import * 时,只是导入__all__内的属性及方法,系统不会自动生成,需要自行定义。用于当使用from xxx import *是,只能导入部分函数与属性
4、__doc__:模块和属性、函数的文档字符串
#模块的隐藏模块
模块中以_开头的变量为模块的隐藏属性,在使用from xxx import *时不会被导入
#python执行过程
先搜索路径打开模块
判断是否有模块对应的.pyc文件,如果.pyc文件比.py文件新,则直接加载.pyc文件
否则,用模块编译成mymod.pyc然后在python解释执行器中执行
#random模块函数import random as R
R.random():返回[0,1)之间的随机实数,用它乘以整数可以得到n以内的随机数
R.uniform(a,b):返回区间[a,b)区间内的实数
R.randrange([start,]end[,step])
R.choice(iterable):从可迭代对象中随机抽取一个元素
R.shuffle(seq[,random]):随机指定序列顺序
R.sample(population,k):从population中随机获取k个元素,返回列表;速度及其快速,推荐使用
R.getrandbits(n):获取一个每个位都是随机0、1的n位二进制数
R.seed(a=None):设置随机种子,如果随机种子一定,则谁中是一定的
#练习题:模拟斗地主发牌
import random
l = list()
def fapai():
global l
l = [x+1 for x in range(54)]
random.shuffle(l)
def dayinpai(i):
#print((i-1) // 13)
#return
if i == 53:
print("xiaowang",end=' ')
return
elif i == 54:
print("dawang",end=' ')
return
elif (i-1) // 13 == 0:
print("\u2660",end='')
elif (i-1) // 13 == 1:
print("\u2663",end='')
elif (i-1) // 13 == 2:
print("\u2665",end='')
elif (i-1) // 13 == 3:
print("\u2666",end='')
if (i-1)%13+1 == 11:
print("J",end=' ')
elif (i-1)%13+1 == 12:
print("Q",end=' ')
elif (i-1)%13+1 == 13:
print("K",end=' ')
else:
print("%d"%(((i-1)%13)+1),end=' ')
def myprint(x):
def fn():
for i in range((x-1)*17+1,x*17+1):
dayinpai(l[i])
fn()
fapai()
str1 = input()
myprint(1)
str1 = input()
myprint(2)
str1 = input()
myprint(3)
#用random.shuffle()函数对列表进行随机打乱
#包(模块包) package
将模块以文件夹形式进行分组管理的方法
#包的导入
import package_name [as new_name]
import package_name.sub_package_name.module_name [as new_name]
from package_name import module_name [as new_name]
from package_name.module_name import variable_name [as new_name]
#导入包内所有包和模块
from package_name import *
from package_name.module_name import *
#__init__.py
是常规包内必须存在的文件,会在包加载时自动调用
作用(通常这样用):
在内部填写文档字符串
在__init__.py文件内加载包所依赖的包或模块
无论以什么方式导入包,都会运行上一级所有包的__init__.py文件
#__init__.py内的__all__列表
作用:用于记录此包中有哪些模块需要导入,需要自行创建
用from xxx import *时,只查找__all__列表中的模块或者子包
#当在子模块中调用父包中的函数时,用相对导入
.表示本级目录
..上级目录
...上两级目录
以此类推
#包的加载
1、可以将路径添加到sys.path中
2、可以将此包安装到sys.path指定路径中