模块
什么是模块?(Module)
Python 模块本质也是一个 Python 文件,以 .py 结尾。通常我们把一组相关的函数和类组织在同一个文件中,以方便管理和使用。
模块名区分大小写!
模块的作用 :
1、实现代码重用,同时可避免名称冲突,相同的函数名和类名可以同时存在于不同的模块中
2、分解大型系统程序,控制程序的复杂度
3、增强代码的可维护性,模块的修改可作用于调用其的客户程序
模块的分类:
1)系统内置模块:Python提供的模块,如os,sys,logging,math等。
2)第三方模块/库:我们也可以安装和使用第三方模块。
python中通过pip/pip3管理工具来安装第三方模块。通常,第 三方库都会在python官网上注册,如果你要安装一个第三方库, 必须先知道该库的名称,可以在官网或者pypi上搜索,注册后的 第三方库通常的安装命令是: pip3 install 模块名 如果不能识别pip3命令,则在操作系统环境变量path中加入:python安装目录\Sctripts
3)用户自定义模块
sys.modules ----Python模块的管理者
sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules都将记录这些模块。字典sys.modules对于加载模块起到了缓冲的作用。当某个模块第一次导入,字典sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。 字典sys.modules具有字典所拥有的一切方法,可以通过这些方法了解当前的环境加载了哪些模块
dir()函数----查看模块信息
dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。导入模块后可以使用dir(模块名)查看模块中的所有对象列表。
help()函数--查看模块或函数的使用帮助
模块的导入方式1
1)import 模块名 如果要调用模块中的某个成员,则使用: 模块名.函数名() 或 模块名.变量名
模块的导入方式2
2)from math import * 从模块中导入该模块的所有函数,这是:如果要使用模块中的某个成员,则直接使用:函数名() 或 变量名
但如果一次性导入模块过多,会导致变量名冲突的问题存在
模块的导入方式3
3)from 模块名 import 指定成员1,成员2.... 如果调用这些成员,则使用:函数名() 或 变量名,只加载你需要的变量
4)用户自定义模块的路径问题
问题描述:模块aboutFile.py在D://而程序代码P_useFiles.py在c盘的用户桌面下
解决方法:用户程序中配置sys.path
包的基本概念
包的引入:
一个大型系统中往往包含多个模块。为了更好地管理这些模块和避免模块名之间的冲突,我们可以将多个模块按类分放在不同的包里。 Python 中的包本质就是一个文件夹,且该文件夹下存在 init.py 文件。
最简单的情况下,只需要一个空的 init.py 文件即可。当然它也可以执行包的初始化代码。当导入包或者包中的模块时init.py会被执行。
包的下面可以继续包含子包,没有层次限制,这类似文件夹下有子文件夹。
包名是区分大小写的。
数学模块
math模块:
Python的math模块提供了许多对浮点数的数学运算函数
cmath模块:
Python的cmath模块提供了一些用于复数的数学运算函数
import math
def x(n):
#输入:整数n
#输出:返回根据数学公式和n算出来的X值
t=0#计数器
for i in range(1,n+1):#用循环来计算数学累积
t+=1/(math.sqrt(i+math.sqrt(i+1)))
return t
def main(): #main作为程序的入口名
n=int(input('请输入整数n: '))
print('x(n)的结果是',x(n))
if __name__ == '__main__':#如果程序独立运行我就调用main
main()
外部也可以调用了
import p_qiuXn
print(p_qiuXn.x(10))
print(p_qiuXn.main())
>>> import math #求公约数的方法
>>> math.gcd(100,50)
50
def GCD(a,b):#这里是算法描述,原理
if a>b:
a,b=b,a
r=1
while r!=0:
r=a%b
a=b
b=r
return a
def findGCD(): #这里是入口,主代码
x=int(input('请输入第1个整数: '))
y=int(input('请输入第2个整数: '))
print('它们的最大公约数是',GCD(x,y))
if __name__=='__main__':
findGCD()
随机模块
import random
n=int(input('请输入抽奖次数: '))
for i in range(n):
a=random.randint(1,10001)
print('随机数是',a,end=' | ') #end=''不换行
if a==1:
print('你中了特等奖')
elif a<=101:
print('你中了一等奖')
elif a<=2101:
print('你中了二等奖')
elif a<=7101:
print('你中了三等奖')
else:
print('没中')
import random
def biggerNum(s,x):
num=0 #初始化计算器
for i in range(len(s)):
if s[i]>x:
num+=1 #统计s里面比X大的数
return num
def main():
x=random.randint(0,100)
s=[]
for j in range(10):
s.append(random.randint(0,100))
bN=biggerNum(s,x)#调用函数
print('随机序列:',s)
print('随机参考值:',x)
print('序列中比参考值大的有%d个'%bN)
if __name__=='__main__':
main()
import turtle,random
turtle.ht()#隐藏小乌龟
turtle.shape('turtle')#修改turtle形状为小乌龟
n=random.randint(5,20)#生成5到20之间的随机数,也就是盖印个数
used=[]#用于存储产生过印记的点
for i in range(n):
while True:
x=random.randint(-10,10)#随机生成x
y=random.randint(-10,10)#随机生成y
if [x,y] in used:#如果这个位置盖过章了
continue#继续循环,产生while的x,y
break#如果当前随机数点没盖过章,则退出循环
used.append([x,y])#将当前的加入到used中,记录该点盖过章了
turtle.pu()
turtle.goto(x*30,y*30) #到x*30,y*30的绘图点去,放大
turtle.color(random.random(),random.random(),random.random())#产生随机颜色,rgb模式
turtle.stamp()#盖下脚印
turtle.done()
#16进制颜色模式
import turtle,random
turtle.ht()#隐藏小乌龟
turtle.shape('turtle')#修改turtle形状为小乌龟
#c16存储16进制中用法哦的所有数字的字符形式
c16=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
n=random.randint(5,20)#生成5到20之间的随机数,也就是盖印个数
used=[]#用于存储产生过印记的点
for i in range(n):
while True:
x=random.randint(-10,10)#随机生成x
y=random.randint(-10,10)#随机生成y
if used.count(x*20+y)==1:#如果这个位置盖过章了
continue#继续循环,产生while的x,y
break#如果当前随机数点没盖过章,则退出循环
used.append(x*20+y)#将当前的加入到used中,记录该点盖过章了
turtle.pu()
turtle.goto(x*30,y*30) #到x*30,y*30的绘图点去,放大
#颜色部分的处理
rancolor='#'#表示本次雄安乌龟盖印使用的颜色
for x in range(6):
rancolor=rancolor+c16[random.randint(0,15)]
turtle.color(rancolor)
turtle.stamp()#盖下脚印
turtle.done()