14.Python 模块

目录

    • 1. 使用模块
    • 2. 使用包
    • 3. 常用模块
      • 3.1 日期和时间
      • 3.2 伪随机数
      • 3.3 摘要算法
      • 3.4 JSON 处理
      • 3.5 图像处理

模块是Python用来组织代码的一种方法,包是Python用来组织模块的一种方法。

1. 使用模块

Python 把能够相互包含,且有组织的代码段称为模块(module)。使用模块的好处如下:

  • 提高代码的可维护性。
  • 提高代码的可重用性。
  • 避免命名冲突和代码污染。

文件能够在物理层面组织模块,一个文件被看作是一个独立模块,一个模块也可以被看作一个文件。模块的文件名就是模块的名字加上扩展名.py。在.py文件中可以包含类、函数、变量、可运行的代码等。模块也可以被其他模块、脚本、交互式解析器导入(import),也可以被其他程序引用。

Python 模块一般位于安装目录下Lib文件夹中,执行help(“moduels”)命令,可以查看已经安装的所有模块列表。模块可以分为3种类型:

  • 内置标准模块:Python 预安装了很多标准模块,如systimejson模块等。
  • 第三方开源模块:由第三方商业公司或个人开发,并免费分享到网上的模块。用户使用的大部分模块都是这种类型。
  • 自定义模块:由开发者自己开发的模块,方便在脚本中使用

自定义模块的名字不能与系统模块重名,否则有覆盖内置模块的风险。例如,自定义一个sys.py模块后,就不能够使用系统的sys模块。

使用第三方模块时,有2种方法:

1.使用pip命名安装。

'''Windows 按住win+R 输入 cmd,Mac 打开Terminal'''
pip install 模块名 # 安装模块
pip uninstall 模块名 # 卸载模块
pip list # 查看所安装的模块

2.通过下面网址下载模块并安装模块。下载.whl或者.gz文件,在命令行进入到文件目录,使用pip install 文件名或者 python [setup.py](http://setup.py) install

  • PyPi官网:https://pypi.org
  • Gohlke:https://www.lfd.uci.edu/~gohlke/pythonlibs/

使用import语句可以导入模块,模块名不包含.py扩展名。如果模块名比较长,在导入时可以起一个别名。

# 导入模块
import 模块名1
import 模块名2
import 模块名1[,模块名2,..,模块名N]
# 导入模块并起别名
import 模块名1 as 别名 

所有的模块在开头部分导入,并且建议遵循如下顺序:

  1. Python 标准模块。
  2. Python 第三方模块。
  3. 自定义模块。

一个模块无论被导入多少次,它只被加载一次,当Python解释器在源代码中遇到import关键字时,自动在搜索路径(sys.path)中搜寻对应的模块,如果发现在函数中导入,那么它的作用域是局部的。

搜索路径是一个目录列表,被存储在sys模块中的path变量中,供解释器在导入模块时参考,可以事先配置,或者在源代码中设置。

import sys # 导入sys模块
for i in sys.modules: # 遍历所有导入的模块print(i,end='\n')dir(sys) # 查看该模块中可用的成员# 兼容导入适配的模块版本
try:import json # python 2.6版本后
except ImportError:import simplejson as json # python 2.5版本前

使用from-import语句可以将指定模块中的成员名称导入当前作用域中,如函数、类或变量等,语法和示例如下:

from 模块名 import 成员 # 导入单个成员
from 模块名 import 成员1[,成员2,...,成员N] # 导入多个成员
from 模块名 import * # 导入所有成员from time import * # 导入time模块中所有成员
print(dir())  # 查看导入的所有成员名称

2. 使用包

包是Python组织模块的一种逻辑方法,是一个有层次的目录结构,它定义了由多个模块或多个子包组成的Python应用程序运行环境。一个文件夹就是一个包,包的名称就是文件夹的名称,包可以相互嵌套。包的好处如下:

  • 为名称空间加入有层次的组织结构。
  • 允许开发人员把有联系的模块组合到一起。
  • 允许分发者使用目录结构而不是一大堆混乱的文件。
  • 解决同一个允许环境中导入模块重名问题。

创建包就是创建文件夹

包文件夹下存在一个名为__init__.py的文件,用于标识当前文件夹是一个包,建议创建包时都添加__init__.py该文件init.py可以是一个空文件,也可以初始化设置代码。

导入包有两种方法:

  1. 绝对路径导入:通过指定“包.模块.名字”的完整路径进行导入。
  2. 相对路径导入:在一个包(package)的内部,模块之间可以使用相对路径导入。
    • 在导入路径前面添加1个点号(.),表示当前目录。
    • 在导入路径前面添加2个点号(…),表示父级目录。
importimport.子包 
# 常用形式1
import.子包.模块  
# 常用形式2
fromimport 模块  
from.子包 import 模块
from.子包.模块 import 成员

使用相对路径导入,必须是一个完整的项目,切必须从入口程序开始执行。

3. 常用模块

3.1 日期和时间

操作日期和时间的内置模块有:timedatetimecalendar

time 是基础模块,可满足对时间类型数据的基本处理;

时间也是一种数据类型,分3种形式:时间戳(timestamp)、结构化时间(struct_time)、格式化的时间字符串(format string)。

import time # 导入time模块
print(time.time())  # 返回当前时间戳,浮点数:1700636693.016157
'''返回结构化时间,一个元组:
time.struct_time(tm_year=2023, tm_mon=11, tm_mday=22, 
tm_hour=15, tm_min=6, tm_sec=30, 
tm_wday=2, tm_yday=326, tm_isdst=0)
'''
print(time.localtime()) 
print(time.ctime()) # 返回当前本地时间的字符串:Wed Nov 22 15:06:30 2023
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2023-11-22 15:16:00

datetime 模块是对time模块进行高级封装,功能更强大,使用更方便;

包含6个字类型:

  • datetime.date:表示日期,常用的属性有year、month、day。
  • datetime.time:表示时间,常用属性有hour、minute、second、microsecod。
  • datetime.datetime:表示日期时间
  • datetime.timedelta:表示两个date、time、datetime实例之间的时间间隔。
  • datetime.tzinfo:时区对象。
  • datetime.timezone:tzinfo的子类,表示时区,计算UTC的偏移量。
import time
import datetime
# 获取当前时间
print(datetime.datetime.now()) # 2023-11-22 15:35:44.190278
print(datetime.datetime.today()) # 2023-11-22 15:35:44.190382
# datetime 和结构化时间之间相互转换
print(datetime.datetime(year=2023,month=11,day=22,hour=15,minute=30,second=00)) # 2023-11-22 15:30:00
print(datetime.datetime.now().timetuple()) # 转换为结构化时间元组
# datetime和时间戳之间相互转换
print(datetime.datetime.timestamp(datetime.datetime.now()))
print(datetime.datetime.fromtimestamp(1700638527.603307))
# datetime和时间字符串之间的相互转换
dt = datetime.datetime.now()
print(dt.strftime('%Y=%m-%d %H:%M:%S')) # 2023=11-22 15:44:19
print(dt + datetime.timedelta(hours=8)) # 2023-11-22 23:44:19.150674

calendar 模块用于处理日历相关;

import calendar
n = calendar.month(2023,11)
print(n)

3.2 伪随机数

random 内置模块,能够实现各种分布的伪随机数。

  • random.random():用于生成(0<=n<1.0)的浮点数。
  • random.unform(a,b):用于生成(a<=n<b)的浮点数。
  • random.randint(a,b):用于生成(a<=n<=b)的整数。
  • random.randirange([start=0], stop[,step=1]):指定范围内,按指定步长递增的集合中获取一个随机数。
  • random.choice(sequence):从参数序列sequence对象中获取一个随机元素。
  • random.shuffle(x[,random]):将一个列表中的元素打乱。
  • random.sample(sequence,k):从指定序列sequence中随机获取指定长度的片段。
import random 
print(random.random()) # 产生[0,1)浮点数 0.10565535904276113
print(random.uniform(1.1,5.4)) # 产生[1.1,5.4)浮点数 2.2114464386429304
print(random.randint(1,10)) # 产生[0,1]整数 4
print(random.choice([1,2,3,4,5,6,7,8,9,0])) # 从序列中随机选取一个元素 9
print(random.randrange(1,100,2)) # 生成 1~ 100的间隔2的随机整数 79
a = [1,3,5,7,8]
random.shuffle(a) # 将序列a中元素顺序打乱
print(a) # [5, 8, 1, 3, 7]

3.3 摘要算法

hashlib 内置模块包含hash和md5加密方法,这种加密是不可逆的,也称摘要算法。

hash 为哈希,表示把任意的输入,通过某种hash算法,转换成固定长度的输出,这个输出值就是散列值,也称摘要值,算法为哈希函数,摘要函数。

MD5 是最常见的摘要算法,速度快,生成结果是固定的16字节,通常用一个32位的十六进制字符串表示。

常用的方法有如下:

  • md5()sha1():加密算法,获取一个加密的哈希对象。
  • update():用参数字符串更新哈希对象。
  • digest():以二进制数据字符串返回摘要信息。
  • hexdigest():以十六进制数据字符串返回摘要信息。
  • copy():复制哈希对象。
import hashlib # 导入加密模块
s = 'Python'  # 待加密的字符串
md5 = hashlib.md5() # md5加密
md5.update(s.encode('utf-8')) # 注意转码
r = md5.hexdigest() # 返回十六进制的数据字符串值
print(r) # a7f5f35426b927411fc9231b56382173

3.4 JSON 处理

JSON 是一种广泛应用的轻量级的数据交换格式,字典格式,其中包含方括号起来的数组,也就是列表。

json 提供了4中方法来实现Python对象与JSON对象进行快速交换。

  • dumps():将Python对象序列化为JSON字符串表示。
  • dump():将Python对象序列化为JSON字符串,然后保存到文件中。
  • loads():把JSON格式的字符串反序列化为Python对象。
  • loas():从文件中读取内容,然后读取的字符串反序列化为Python对象。
import json
a = {'name':'Tom','age':23}
b = json.dumps(a) # 把序列化Python对象转换为JSON格式字符串
print(type(a)) # <class 'dict'>
print(b,type(b)) # {"name": "Tom", "age": 23} <class 'str'>
c = json.loads(b) # 把JSON格式字符串转换序列化Python对象
print(c['name']) # Tom
print(type(c)) # <class 'dict'>with open('test.json','w',encoding='utf-8') as f:
# indent 表示格式化保存字符串,默认为None,小于0个空格json.dump(a,f,indent=4) # 将字典对象序列化字符串# f.write(json.dumps(a,indent=4)) # 与json.dump()效果一样with open('test.json','r',encoding='utf-8') as f:d = json.load(f) # 转换python对象f.seek(0) # 重写把文件指针移到文件开头e = json.loads(f.read()) # 与json.load(f)执行效果一样print(d) # {'name': 'Tom', 'age': 23}
print(e) # {'name': 'Tom', 'age': 23}

3.5 图像处理

Python Imaging Library 是免费的图像处理工具包,是Python平台上的图像处理标准库。PIL提供强大的图形、图像处理功能,API使用简单。

  • 支持数十种格式,如PNG、JPEG、BMP、GIF、TIFF等。
  • 支持黑白、灰阶、RGB、CMYK等多种色彩模式。
  • 图像基本操作,如裁切、平移、旋转、改变尺寸、调置、剪切、粘贴等
  • 图像色彩处理,如亮度、色调、对比、锐利度等。
  • 支持十多种滤镜。
  • 在图像中绘制点、线、面、几何形状、文字等。

图像的基本操作:

  • open():打开图像
  • new():创建新图像
  • show():显示图像
  • save():保存图像
  • copy():复制图像

图像基本属性

  • format:图像来源
  • size:图像大小
  • mode:图像模式

图像变换操作

  • resize():改变图像大小
  • rotate():旋转图像
  • transpose():翻转图像
  • convert():转换图像
  • filter():特效处理

图像合成、裁切、分离等操作

  • blend():合成图像
  • crop():裁切图像
  • paste():粘贴图像
  • split():根据颜色通道分离图像
  • merge():核查单一图像

图像像素点操作:

  • point():对每个像素点执行一次函数调用操作
  • getpixel():获取指定像素点的颜色值
  • putpixel():为指定像素点设置颜色值
from PIL import Image
im = Image.open('/Users/guanfawang/Downloads/Untitled-89.png')
w,h = im.size
print(w,h) # 506 526
a = im.resize((w//2,h//2)) # 改变尺寸
a.save('/Users/guanfawang/Downloads/a.png') # 保存新尺寸图像
a.rotate(90) # 旋转90度
a.show() # 打开查看图像'''
设计生成验证码图片
'''
# 第一步:从PIL模块中导入图像类、绘图类、图像字体类和图像特效类
from PIL import Image,ImageDraw,ImageFont,ImageFilter
# 第二步:初始化设置
import random  # 导入随机数模块
def rndchar(): # 随机字母return chr(random.randint(65,90))
def rndcolor1(): # 随机颜色1return (random.randint(64,255),random.randint(64,255),random.randint(64,255))
def rndcolor2(): #随机颜色2return (random.randint(32,127),random.randint(32,127),random.randint(32,127))
width = 60*4 # 初始化图像宽度,单位为像素
height = 60 # 初始化图像高度,单位为像素
# 第三步:创建图像对象、字体对象、绘图对象
image = Image.new('RGB',(width,height),(255,255,255)) # 创建Image对象
font = ImageFont.truetype('arialuni.ttf',36) # 创建Font对象
draw = ImageDraw.Draw(image) # 创建Draw对象
# 生成麻点背景
for x in range(width): # 使用随机颜色绘图for y in range(height):draw.point((x,y),fill=rndcolor1())
# 在画布上生成随机字符
for t in range(4): # 输出4个随机字符draw.text((60*t+10,10),rndchar(),font=font,fill=rndcolor2())
image = image.filter(ImageFilter.BLUR) # 模糊化处理
# 第四步:保存图像
image.save('code.jpg','jpeg')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/161755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET面试题1

1.什么是C#&#xff1f; C#&#xff08;读作"C sharp"&#xff09;是一种通用的、面向对象的编程语言&#xff0c;由Microsoft开发。它是一种静态类型语言&#xff0c;支持强类型检查和面向对象编程&#xff08;OOP&#xff09;的概念。C#主要用于开发Windows应用程序…

Bug等级划分

Bug是指在程序或系统中存在的错误、缺陷或异常&#xff0c;是由于编码错误、设计问题、逻辑错误或其他因素导致的。 常见的Bug分类方法 功能性Bug与软件的功能有关&#xff0c;软件无法正常工作、功能与需求不符或功能执行不正确。 用户界面Bug与软件的用户界面有关&#xff…

Unity中Shader双向反射分布函数BRDF

文章目录 前言一、渲染方程二、什么是BxDF1、BSSRDF2、BRDF3、BTDF4、BSDF 三、迪士尼原则的BRDF四、迪士尼原则的BRDF的参数五、在Unity中看一下默认Shader的这些参数六、在这里记录一下使用 Blender 和 SubstancePainter 的流程1、在Blender中导出模型为 .obj 格式2、在Subst…

Android WMS—— Surace管理 (二十)

WMS 负责创建 Surface 以及对 Surface 的摆放工作,之后将 Surface 提交给SurfaceFlinger 进行合并。在 App 层也创建了一个 Surface 对象,但是那个是空对象,用于 WMS 的填充。 一、Surface的创建 首先 APP 层在 ViewRootImpl 的 relayoutWindow() 方法中发起创建任务。 1、…

Go 实现网络代理

使用 Go 语言开发网络代理服务可以通过以下步骤完成。这里&#xff0c;我们将使用 golang.org/x/net/proxy 包来创建一个简单的 SOCKS5 代理服务作为示例。 步骤 1. 安装 golang.org/x/net/proxy 包 使用以下命令安装 golang.org/x/net 包&#xff0c;该包包含 proxy 子包&am…

天软特色因子看板 (2023.11 第12期)

该因子看板跟踪天软特色因子A05006(近一月单笔流入流出金额之比(%)&#xff0c;该因子为近一个月单笔流入流出金额之比(%)均值因子&#xff0c;用以刻画在 市场日内分时成交中流入、流出成交金额的差异性特点&#xff0c;发掘市场主力资金的作用机制。 今日为该因子跟踪第12期&…

expect脚本在自动化部署中的具体应用案例

#expect脚本在自动化部署中的具体应用 expect脚本是一个非常好的交互式应用脚本&#xff0c;在自动化部署中&#xff0c;可以使用这个脚本来实现全自动的自动化部署。下面是一些具体的应用案例。 场景一&#xff1a;自动安装mysql 可以使用expect脚本来实现mysql自动安装&…

Windows平台Unity下实现camera场景推送RTMP|轻量级RTSP服务|实时录像

技术背景 我们在对接Unity平台camera场景采集的时候&#xff0c;除了常规的RTMP推送、录像外&#xff0c;还有一些开发者&#xff0c;需要能实现轻量级RTSP服务&#xff0c;对外提供个拉流的RTSP URL。 目前我们在Windows平台Unity下数据源可采集到以下部分&#xff1a; 采集…

@PostConstruct虽好,请勿乱用

1.问题说明 在日常的业务开发中&#xff0c;有时会利用PostConstruct在容器启动时执行一些任务。例如&#xff1a; PostConstruct public void init(){System.out.println("service 初始化..............."); }一般情况这没什么问题&#xff0c;但最近一个同事在做…

ui5使用echart

相关的代码已经发布到github上。 展示下相关的实现功能 1、柱状图-1 2、柱状图-2 3.折线图 4.饼状图 如何使用&#xff1a; 使用git clone项目到本地 git clone https://github.com/linhuang0405/com.joker.Zechart找到index.html。在vscode里右键选择Open with Live Serve…

1

【任务 1】私有云服务搭建[10 分] 【题目 1】基础环境配置[0.5 分] 【题目 2】Yum 源配置[0.5 分] 【题目 3】配置无秘钥 ssh[0.5 分] 【题目 4】基础安装[0.5 分] 【题目 5】数据库安装与调优[0.5 分] 【题目 6】Keystone 服务安装与使用[0.5 分] 【题目 7】Glance 安装与使用…

BLE通用广播包

文章目录 1、蓝牙广播数据格式2、扫描响应数据 1、蓝牙广播数据格式 蓝牙广播包的最大长度是37个字节&#xff0c;其中设备地址占用了6个字节&#xff0c;只有31个字节是可用的。这31个可用的字节又按照一定的格式来组织&#xff0c;被分割为n个AD Structure。如下图所示&…

npm命令

node -v --查看版本 npm install --安装npm npm config get registry --查看npm当前镜像 npm config set registry https://registry.npmmirror.com --设置淘宝镜像 npm版本管理工具

VS Code 如何搭建C/C++环境

目录 一、VS Code是什么&#xff1f; 二、VS Code下载和安装 2.1下载 2.2安装 2.3环境介绍 三、Vs Code配置C/C环境 3.1下载和配置MinGW-w64编译器套件 3.1.1下载 3.1.2配置 一、VS Code是什么&#xff1f; 跨平台&#xff0c;免费且开源的现代轻量级代码编辑器 Vis…

【MATLAB源码-第85期】基于farrow结构的滤波器仿真,截止频率等参数可调。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 Farrow结构是一种用于实现可变数字滤波器的方法&#xff0c;尤其适用于数字信号处理中的采样率转换和时变滤波。它通过多项式近似来实现对滤波器系数的平滑变化&#xff0c;使得滤波器具有可变的群延时或其他参数。 Farrow结…

mysql中数据是如何被用B+树查询到的

innoDB是按照页为单位读写的 那页中有很多行数据&#xff0c;是怎么执行查询的呢&#xff0c;首先我们肯定&#xff0c;是以单向列表形式存储的&#xff0c;提高了增删的效率&#xff0c;但是查询效率低。所以实际上对页中的行数据进行了优化&#xff0c;能以二分的方式进行查…

Mac Goland无法调试

去github上下载golang的debug工具delve&#xff1a; go-delve/delve​github.com/go-delve/delve/blob/master/Documentation/installation/README.md​编辑 或者: go install github.com/go-delve/delve/cmd/dlvlatest按照他的安装方式进行安装&#xff0c;最后会在本地的…

基于北方苍鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于北方苍鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于北方苍鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于北方苍鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

Java面试-框架篇-Mybatis

Java面试-框架篇-Mybatis MyBatis执行流程延迟加载使用及原理一, 二级缓存来源 MyBatis执行流程 读取MyBatis配置文件: mybatis-config.xml加载运行环境和映射文件构造会话工厂SqlSessionFactory会话工厂创建SqlSession对象(包含了执行SQL语句的所有方法)操作数据库的接口, Ex…

vue脚手架的基础搭建过程

MVVM架构 Vue框架底层设计遵循MVVM架构。 Model层&#xff08;M&#xff09;模型层&#xff08;业务逻辑层&#xff09; View层&#xff08;V&#xff09;视图层 主管UI ViewModel层&#xff08;VM&#xff09; 将项目代码划分清晰的层次结构后&#xff0c;非常有利于后期代…