Jay jay
文章28
标签2
分类0
python学习之模块、包、库的使用

python学习之模块、包、库的使用

模块

在python中一个模块(module)是一个以.py结尾的python文件,包含了python对象和语句。

模块的好处:

  1. 方便组织代码
  2. 提高代码的重用性
  3. 增加代码的重用性
  4. 避免函数名和变量名冲突

模块的导入方式:

  • 模块就是.py类型的Python文件

  • 导入时不需要.py后缀,直接导入文件名即可

    1、**利用import**直接导入:

  • 语法:**import** module_name

  • 使用方式:module_name.class_name或者module.func_name

    2、利用**import**导入模块并设置一个别名

  • 语法:**import** module_name as XXX

  • 使用方式:XXX.class_name或者XXX.funct_name

    3、借助**from**复制模块的属性,可以实现只导入模块中的部分类或函数或变量

  • 语法:**from** module_name import class_name, funct_name

  • 使用方式:直接调用函数或实例化类即可

  • 但要注意,from把变量从模块中导入后,会导致相同名称的变量被覆盖,也就是说不同模块的命名空间会在此处重叠。

    4、借助**from...import ***导入模块全部内容

  • 语法:**from** module_name import *

  • 使用时直接调用函数或实例化类即可

    5、借助importlib模块实现导入以数字开头的模块

  • 语法:**import importlib**

  • XXX = importlib.import_module(“module_name”)

  • 使用时XXX.class_name或者XXX.func_name

自带模块:

Turtle模块:

Turtle是python内嵌的绘制线、圆及其他形状(包括文本)的图形模块,它可以创建一个画笔,在一个横轴为x纵轴为y的坐标系原点位置开始,根据一组函数指令控制,在这个平面绘制图形

画布(Canvas):是Turple模块展开用于绘制图形的区域,默认一个坐标原点为画布中心的坐标轴,可以使用turtle.screensize(width,height,bg(bg代表背景颜色))和turtle.setup设置它的大小和初始位置

turtle.setup(width,height,startx,starty)其中startx,starty是画布左上角顶点在窗口的坐标位置

画笔:

画笔状态:使用位置方向描述画笔状态

画笔属性:包括画笔颜色、宽度移动速度,

​ turtle.pencolor(color)、turtle.pensize(width)、 tu rtle.speed(speed)

绘图命令:

#Turtle模块:
import turtle
#绘制一个圆和一个填充正方形
turtle.penup()
turtle.goto(-150,0)
turtle.pendown()
turtle.pencolor('blue')
turtle.begin_fill()
turtle.fillcolor('blue')
for i in range(4):
turtle.forward(100)
turtle.left(90)
turtle.end_fill()
#画圆
turtle.penup()
turtle.goto(100,0)
turtle.pendown()
turtle.color('red')
turtle.pensize(3)
turtle.circle(50)
turtle.done()

用turtle在画布上写字:

#在画布上写文字
t=turtle.Turtle()
t.penup()
t.goto(-80,20)
t.write("望庐山瀑布",font=("黑体",14,"normal"))
t.sety(-10) #画笔向下移
t.write("你很牛",font=("宋体",16,"normal"))
t.hideturtle()
turtle.done()

Random模块:

random模块用于生成随机数:

  1. random.random()函数用于生成[0,1)之间的随机浮点数。

  2. random.uniform(start,end)函数用于生成一个指定范围内的随机浮点数

  3. random.randint(start,end)函数用于生成一个指定范围内的整数

  4. random.randrange(start,end,step)函数用于生成指定范围指定步长的随机整数

  5. random.choice(序列对象)函数的功能是从序列对象中获取一个随机元素

  6. random.shuffle(序列对象[,random])函数用于将一个序列对象中的元素打乱

  7. random.sample(序列对象,k)从指定序列对象中随机获取指定长度(k)的片的

    #random模块
    import random
    for i in range(1,6):
    print(random.random())

    print("*"*10)
    random.uniform(2,6)
    random.uniform(8,6)
    random.uniform(-1,1)
    print()
    print("*"*10)
    for x in range(1,6):
    print(random.randint(1,100))
    print()
    print("*"*10)
    list1=[]
    for m in range(1,11):
    list1.append(random.randrange(1,100,2))
    print(list1)
    print()
    print("*"*10)
    for n in range(1,4):
    print(random.choice(list1))
    print()
    print("*"*10)
    for l in range(1,4):
    print(random.shuffle(list1))
    print()
    print("*" * 10)
    list2=[1,2,3,4,5,6,7,8]
    slice1=random.sample(list2,4)
    print("slice1:",slice1)

Time和Datetime模块:

time模块主要用于时间访问和转换提供了各种相关函数:

  1. time.time():返回时间戳(自1970-1-1 0:00:00至今所经历的浮点秒数)
  2. time.asctime([t]):将一个tuple或struct_time形式的时间转换为一个表示当前本地时间的字符串
  3. time.ctime([secs]):将一个秒数时间戳表示的时间转换为一个表示当地时间的字符串
  4. time.localtime([secs]):返回以指定时间戳对应的本地时间struct——time对象
  5. time.strftime(s,t):将struct_time对象转换成字符串
  6. time.altzone:返回与utc时间的时间差以秒为单位

datetime模块为日期和事件处理同时提供了简单复杂的方法,其中有

日期类(date类):d=datetime.date(year,mouth,day)

时间类(time类):t=time(hour,[minute,[second,[,tzinfo]]])

日期时间类(datetime类):dt=datetime(year,month,day,hout,minute,second,microsecond,tzinfo)

时间差类(timedelta类):td=datetime.timedelta(days,seconds,microseconds,milliseconds,hours,weeks)

#datetime类的使用:
#date类:
from datetime import date
d=date.today()
print("当前日期:",d)
print("日期:{}年{}月{}日".format(d.year,d.month,d.day))
print("今天是周{}".format(d.isoweekday()))
print("*" * 10)
#time类:
from datetime import time
print("时间最大值:",time.max)
print("时间最小值:",time.min)
t=time(20,30,50,8888)
print("时间:{}时{}分{}秒{}微妙".format(t.hour,t.minute,t.second,t.microsecond))
print("*" * 10)
#datetime类
from datetime import datetime
dt=datetime.now()
print("当前日期:",dt.date())
print("当前时间:{} 当前年份:{}年 当前月份:{}月 当前日期:{}日".format(dt.time(),dt.year,dt.month,dt.day))
print("时间:",datetime(2018,9,16,12,20,36))
print("*" * 10)
#timedelta类
from datetime import datetime,timedelta
print("1周包含的秒数:",timedelta(days=7).total_seconds())
d=datetime.now()
print("当前本地系统时间:",d)
print("一天后:",d+timedelta(days=1))
print("一天前:",d+timedelta(days=-1))

OS模块:

​ os模块是一个用于访问操作系统功能的模块,通过os模块中提供的接口可以实现以下功能:

  1. 获取平台信息

    • os.getcwd():获取当前工作目录
    • os.sep:查看操作系统特定的路径分隔符
    • os.linesep:查看当前平台使用的行终结符
    • os.pathsep:查看用于分隔文件路径的字符串
    • os.name:查看当前系统平台
    • os.environ:查看当前系统的环境变量
    import os
    print("分隔符:",os.sep)
    print("操作系统平台:",os.name)
    print("环境变量path:",os.getenv('path'))

  2. 目录文件操作:

    • os.mkdir(newdir):创建新目录

    • os.rmdir(dir):删除目录

    • os.listdir(path):列出指定目录path下所有文件

    • os.chdir(path):改变当前脚本的工作目录为指定路径path

    • os.remove(file):删除一个指定文件file

    • os.rename(oldname,newname):重命名一个文件

      os模块获取文件属性:

    • os.path.abspath(path):返回绝对路径

    • os.path.split(path):将path分割成包含目录和文件名的元组返回

    • os.path.exists(path):如果path存在则返回true否则返回false

    • os.path.isfile(file):如果file是一个存在的文件则返回true否则返回false

    • os.path.isdir(dir):如果dir是一个存在的目录则返回true否则返回false、

    • os.path.getsize(file);返回指定文件大小

    #os文件操作:
    import os
    print("当前工作路径:",os.getcwd())
    print("当前路径的目录和文件列表:",os.listdir())
    os.rename("1.py","11.py")
    print("重命名文件夹后当前路径的目录和文件列表",os.listdir())
    os.mkdir("newDir")
    print("创建文件目录后当前目录和文件列表:",os.listdir())
    os.chdir("newDir")
    print("改变当前工作路径后,当前工作路径:",os.getcwd())

    print("(路径,文件)",os.path.split(r"d:\OS模块\1.py"))
    print("目录存在?:",os.path.exists(r"d:\OS模块"))
    print("文件存在?",os.path.isfile(r"d:\OS模块\1.py"))
    print("文件大小:",os.path.getsize(r"d:\OS模块\1.py"))

  3. 调用系统命令:

    os模块中用于调用系统命令的常用函数:

    • os.popen(cmd[,mode[,bufsize]]):用于由一个命令打开一个管道。cmd为系统命令,mode为模式(r或w),bufsize为文件需要的缓冲大小

    • os.sysem(shell):运行shell命令

      import os
      os.system("rmdir d:\\python学习\\大四学习\\newDir")
      os.popen(r"c:\windows\notepad.exe")
      print("程序执行成功")

Sys模块:

sys模块提供对python解释器相关的操作

Timeit模块:

是一个计时功能的模块,用于测试一段代码运行时间

timeit()函数返回执行代码所用的时间单位为秒:t=timeit(stmt=’code’,setup=’code’,timer=,number=n),stmt是要执行的代码,setup为执行代码的准备工作,timer一般为time.clock(),number为执行代码次数

repeat()函数比timeit函数多了一个repeat参数控制执行多少遍格式:

t=repeat(stmt=’code’,setup=’code’,timer=,repeat=m,number=n)

import timeit
def myfun():
sum=0
for i in range(1,100):
for j in range(1,100):
sum=sum+i+j

t1=timeit.timeit(stmt=myfun,number=1000)
print("t1=",t1)
t2=timeit.repeat(stmt=myfun,repeat=6,number=1000)
print("t2=",t2)

Zlib模块:

用来进行数据打包解包常用函数如下:

  1. zlib.compress(string):对string进行压缩

  2. zlib.decompress(string):对string进行解压

    #使用zlib模块对字符串进行压缩解压
    import zlib
    str=b'贾程林是个猪头,大猪头'
    print("压缩前:{}字符个数:{}".format(str,len(str)))
    str_com=zlib.compress(str)
    print("压缩后:{}字符个数:{}".format(str_com,len(str_com)))
    str_dec=zlib.decompress(str_com)
    print("解压后:{}字符个数:{}".format(str_dec,len(str_dec)))

模块的使用简单总结就是将模块导入,知道模块中函数的功能与传递参数的含义熟练的使用就可以掌握。

第三方库模块:

Pyinstaller库:

可以用这个库来打包程python应用程序,打包时pyinstaller库会扫描python程序的所有文档,分析所有代码找出代码运行所需的模块,然后将所有这些模块和代码放在一个文件夹里或一个可执行文件里这样用户不需要下载各种软件运行环境就可以执行这个可执行程序

下载和安装:

pip install pyinstaller

打包应用程序:

  1. 创建一个python源文件
  2. 打开命令行界面进入源文件所在路径
  3. 在命令行界面运行命令:”pyinstaller -F 源文件名“ 打包源文件,成功执行后生成可执行文件源文件名.exe在源文件所在路径的dist中就可以让别人使用

第三方库模块还有Numpy库开源的数值计算库、Pandas库一种解决数据分析任务的工具库、SciPy库一款方便易于使用专为科学和工程设计的库、Matplotlib库一个基于python跨平台交互式2D绘图库Jieba库优秀的中文分词库这些库的需要参考使用文档学会调用其内部函数就可以了。

为了对同一类型的模块进行有效的管理,引入了包(package)来组织模块,包是模块所在文件的目录,并且在该目录下必须有一个名为__init__.py的文件;否则python就将该目录视作为普通目录,而不是一个包。__init__.py可以是一个空文件,也可以包含python代码。

包的导入:

​ 1.利用**import直接导入包(仅仅导入__init__.py中的内容**)

  • 语法:import package_name

  • 直接导入一个包,仅仅可以使用_init_.py中的全部内容

  • 使用:package_name.func_name 或者 package_name.class

    2.导入包中的某一个模块

  • 语法:import package_name.module_name

  • 使用:package_name.module_na112afme.func_name或
    package_name.module_name.class_name

具有相关功能的包和模块集合则形成了库如:python标准库、numpy库等

按照库的来源可分为三种库:

  1. 标准库(python自带)

    常用标准库:

  2. 第三方库(由第三方机构发布具有特定功能)

    第三方库的使用和自带的库使用类似不过首先需要在terminal中用pip安装相关库然后导入库和模块按照模块使用方法使用即可

  3. 自定义库(用户创建)

    用户自己可以编写具有特定功能的模块,保存到扩展名为.py的文件中。由用户自己编写的模块称为自定义模块。和标准库模块第三方库中的模块一样。如果要调用自定义模块中的类、函数、属性也必须用import语句导入后在使用

    以一个项目名称为P1的例子介绍自定义模块创建和使用:

    • 场景1:

      在源文件A11.py中调用包package1中的模块A12:

      实现步骤:

      1. 在package1下添加A11.py和模块A12中的程序代码
      2. 分别编写源文件A11.py和A2中的程序代码

      目录结构如下:

      方法一:源文件A11.py中的程序代码:

      import A12
      print(A12.func_A12()) #使用A12中的函数func_A12()

      结果

      方法二:源文件A11中的程序代码:

      #方法二
      from A12 import *
      print(func_A12())#使用A12中的函数func_A12()

      方法三:源文件A11中的程序代码:

      #方法三:
      from A12 import func_A12
      print(func_A12())#使用A12中的函数func_A12()

      方法四:源文件A11中的程序代码:

      #方法四
      import A12 as a
      print(a.func_A12())#使用A12中的函数func_A12()

    • 场景二:在源文件main.py中调用包pack2中的模块A2

      实现步骤:

      1. 在pack2文件夹中创建__init__.py
      2. 分别编写模块A2和源文件main.py中的程序代码

      方法一:

      源文件main.py中的程序代码:

      #方法一:
      from pack2.A2 import *#或者from pack2.A2 import func_A2()
      print(func_A2())#调用函数

      方法二:

      源文件main.py中的程序代码:

      #方法2
      import pack2.A2
      print(pack2.A2.func_A2())#调用函数

    • 场景三:在源文件A11中调用模块A2

      在本场景中源文件A11.py和模块A2分别在两个不同路径的包中实现步骤:

      1. 在pack2中添加__init__.py
      2. 分别编写源文件A11和模块A2

    方法一:

    源文件A11中的程序代码:

    #方法一:
    import sys
    sys.path.append('d:\\python学习\\大四学习\\pack\\pack2')#引入pack2所在路径
    import A12 #导入模块
    print(A12.func_A12()) #调用函数

    方法二:

    源文件A11中的程序代码:

    # 方法2:
    import sys

    sys.path.append('d:\\python学习\\大四学习\\pack') # 引入pack所在路径
    import pack2.A2
    print(pack2.A2.func_A2())

本文作者:Jay jay
本文链接:https://yyj-xx.github.io/2021/10/17/python%E5%AD%A6%E4%B9%A0%E4%B9%8B%E6%A8%A1%E5%9D%97%E3%80%81%E5%8C%85%E3%80%81%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可