Python模块、迭代器与正则表达式day10
1、Python模块
1.1模块的简介
在编写代码的时候,创建的.py文件就被称为一个模块
1.2模块的使用
想要在a文件里使用b文件的时候,只要在a文件中使用关键字import导入即可

1.2.2 from ...import...语句
导入模块可以使用import,如果只导入模块的某个属性或者方法,可以使用from ...import....语句

1.3Python中的包
1.3.1什么是包
包就是一个含有__init__.py的文件夹,文件夹中可以含有子包或者模块

1.3.2如何使用包
包的本质是模块,目的也是为了被导入使用,但是包不能像普通模块那样执行代码,所以包提供了一个__init__.py文件,导入包则会执行此文件,这就是包含有此文件的意义

1.3.3导入自定义包
导入自定义包需要保证包在Python的搜索路径中,列表包括:
1.当前脚本所在目录
2.环境变量PYTHONPATH的目录
3.你所使用的Python编辑器版本的安装目录中
(一般都将自定义包放在所在目录或者子目录中,或者放在环境变量中)
1.4Python标准库(了解一下)
| 模块名称 | 模块描述 |
| os | os 模块提供了许多与操作系统交互的函数,例如创建、移动和删除文件和目录,以及访问环境变量等。 |
| sys | sys 模块提供了与 Python 解释器和系统相关的功能,例如解释器的版本和路径,以及与 stdin、stdout 和 stderr 相关的信息。 |
| time | time 模块提供了处理时间的函数,例如获取当前时间、格式化日期和时间、计时等。 |
| datetime | datetime 模块提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等。 |
| math | math 模块提供了数学函数,例如三角函数、对数函数、指数函数、常数等。 |
| json | json 模块提供了 JSON 编码和解码函数,可以将 Python 对象转换为 JSON 格式,并从 JSON 格式中解析出 Python 对象。 |
| numpy | 一个用于维度数组计算的库 |
| opencv | 一个用于计算机视觉的库 |
| matplotlib | 一个用于数据可视化的库(绘图) |
| scikit-learn | 一个用于机器学习的库 |
| tensorflow | 一个用于深度学习的库 |
| threading | 一个用于设置多线程的库 |
2、迭代器与生成器
2.1迭代器
迭代是python访问集合中元素的一种方式,迭代器是一个可以记住遍历的位置的对象。
举例:
使用map()函数,将一个函数作用于一个序列中的所有元素,并返回一个迭代器——对迭代器可以再次转换成list tuple set等等等
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不能后退。
迭代器有两个基本的方法:iter() 和 next()。
s = "HQYJ"
print(type(s))# iter() 方法 把序列转换成 迭代器
iter1 = iter(s)
print(type(iter1))
try:while True:print(next(iter1))
except StopIteration:print("迭代已结束")
StopIteration
StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在__next__()方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代
创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。
- iter() 方法返回一个特殊的迭代器对象,这个迭代器对象实现了 next() 方法并通过 StopIteration 异常标识迭代的完成。
- next() 方法会返回下一个迭代器对象。
demo:
# 创建一个返回数字的迭代器,起始值为10,逐步递增10
# 也就是说起始值是10,步长值为10
class MyNum:def __iter__(self):self.a = 10return selfdef __next__(self):x = self.aself.a += 10return x# 实例化对象
my_iter = iter(MyNum())#实例化这个类print(next(my_iter))
print(next(my_iter))
print(next(my_iter))
print(next(my_iter))
print(next(my_iter))
2.2生成器
在Python中使用了yield的函数被称为--生成器
yield 是一个关键字,用于定义生成器函数,生成器函数是一种特殊的函数,可以在迭代过程中逐步产生值,而不是一次性返回所有结果。
与普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单的理解【生成器就是一个迭代器】。
每次使用yield语句生产一个值之后,函数都将暂停执行【内存释放出来】,等待再次唤醒。
yield语句和return语句的差别就在于yield语句返回的是可迭代对象,而return返回的是不可迭代对象。
每次调用生成器的next()方法或者使用for或while循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇见yield语句。
def creat1(n):while n>0:yield nn -= 1create_iter = creat1(5)print(next(create_iter))for i in create_iter:print(i)
3、正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re模块使 Python 语言拥有全部的正则表达式功能。
一个正则表达式的匹配工具:https://regex101.com/
3.1re.match函数
从字符串的起始位置匹配,匹配不成功就返回None
语法格式:re.match(pattern, string, flags=0)
参数: pattern 需要匹配的正则表达式
string 匹配的字符串
flags 标志位,用于控制正则表达式的匹配方式,
如:是否区分大小写,多行匹配等
若匹配到了数据,就可以使用group(num) 或 groups() 来提取数据了。
group(num=0) 匹配整个字符串,可以设置参数
groups() 返回一个元组,包含所有小组字符串的元组
import re# match从开始位置匹配
ret = re.match('hqyj', "hqyj world hqyj")
print(ret.group())
3.2re.search函数
re.search 扫描整个字符串并返回第一个成功匹配的字符串。
import re
s1 = 'hqyj world hqyj'
s2 = 'hello hqyj world hqyj hahaha'# search扫描整个字符串,返回第一个匹配的结果
set = re.search('hqyj', s2)
print(set, set.group())
3.3 re.findall函数
re.findall 匹配整个字符串,返回string中所有与pattern相匹配的全部子串,返回形式为数组
import re
s1 = 'hqyj world hqyj'
s2 = 'hello hqyj world hqyj hahaha'
# findall 扫描整个字符串,返回所有匹配的结果
fet = re.findall('hqyj', s2)
print(fet)
3.4 matchr、search、findall的区别
-
re.match 从首字母匹配,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None。
-
re.search 匹配整个字符串,直到找到一个对应匹配【若有多个,也只返回第一个】。
-
re.findall 返回匹配到的所有子串。
3.5 正则表达式修饰符 - 可选标志
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。如 re.I | re.M 被设置成 I 和 M 标志:
| 修饰符 | 描述 |
| re.I | 使匹配对大小写不敏感。 |
| re.L | 做本地化识别(locale-aware)匹配。 |
| re.M | 多行匹配,影响 ^ 和 $。 |
| re.S | 使 . 匹配包括换行在内的所有字符。 |
| re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B。 |
| re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
3.6 正则表达式模式
模式字符串使用特殊的语法来表示一个正则表达式。
- 字母和数字表示他们自身。
- 一个正则表达式模式中的字母和数字匹配同样的字符串。
- 多数字母和数字前加一个反斜杠时会拥有不同的含义。
- 标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
- 反斜杠本身需要使用反斜杠转义。
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。


import re#匹配出一个字符串第一个字母为大写字符,后面都是小写字母并且这些小写字母可有可无
def fun1(s:str):ret = re.match(r'[A-Z][a-z]*', s)if ret:print(ret.group())else:print("匹配不成功")s = 'Abcd777'
fun1(s)#匹配变量名是否有效
def fun2(name:str):ret = re.match(r'[A-Za-z_]+[\w]*', name)if ret:print(ret.group())else:print("变量命名不合法")name = '_a '
fun2(name)#匹配出6位密码,可以是大小写英文字母、数字、下划线
#匹配出,8到20位的密码,可以是大小写英文字母、数字、下划线
def fun3(pwd:str):ret = re.match(r'\w{8,20}', pwd)if ret:print(ret.group())else:print("密码不正确")fun3('12345')

import re
#匹配163.com的邮箱地址
# 以^确定开头
# 通过$来确定末尾
myemail = 'hqyj_sunwy@163.com'
ret = re.match(r'^\w{4,20}@163\.com$', myemail)
print(ret.group())
import re#匹配出163、126、qq邮箱
myemail = '2042856895@qq.com'
ret = re.match(r'^\w{4,20}@(163|126|qq)\.com$', myemail)
print(ret.group())#匹配出<html><h1>www.bawei.com</h1></html>
ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", "<html><h1>www.hqyj.com</h1></html>")
print(ret.group())#匹配出<html><h1>www.bawei.com</h1></html>
ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.hqyj.com</h1></html>")
print(ret.group())
注意贪婪和非贪婪
贪婪是尝试匹配尽可能多的字符。
非贪婪是尝试匹配尽可能少的字符。
解决方式:非贪婪操作符”?”,用在"*","+","?"的后面,要求正则匹配的越少越好。
import re
s = 'abbcdef123456'
ret = re.match(r'\w+', s)
print(ret.group())
# 输出结果:abbcdef123456
ret = re.match(r'\w+?', s)
print(ret.group())
# 输出结果:a
3.7 re.split函数
功能是分割
import re
s = 'user:zhangsan pwd:888666'
ret = re.split(r':| ', s)
print(ret)
3.8 re.sub函数
功能是替换
import re
s = 'i am zhangsan, i am 18 year, i like eat'
ret = re.sub(r"i", "I", s)
print(ret)
相关文章:
Python模块、迭代器与正则表达式day10
1、Python模块 1.1模块的简介 在编写代码的时候,创建的.py文件就被称为一个模块 1.2模块的使用 想要在a文件里使用b文件的时候,只要在a文件中使用关键字import导入即可 1.2.2 from ...import...语句 导入模块可以使用import,如果只导入模…...
Hutool工具类生成二维码
1、引入依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutoo…...
wpf 事件转命令的方式
1,方式1 <StackPanel Background"Transparent"><StackPanel.InputBindings><KeyBinding Command"{Binding ChangeColorCommand}"CommandParameter"{Binding ElementNamecolorPicker, PathSelectedItem}"Key"{Bi…...
第二十八章 TCP 客户端 服务器通信 - JOB命令示例
文章目录 第二十八章 TCP 客户端 服务器通信 - JOB命令示例JOB命令示例 第二十八章 TCP 客户端 服务器通信 - JOB命令示例 JOB命令示例 以下示例显示了一个非常简单的并发服务器,只要它检测到来自客户端的连接,就会产生一个子作业。 JOB指定一个并发服…...
「Mac玩转仓颉内测版19」PTA刷题篇10 - L1-010 比较大小
本篇将继续讲解PTA平台上的题目 L1-010 比较大小,通过对三个整数的排序,进一步提升Cangjie编程语言的数组操作与逻辑处理能力。 关键词 PTA刷题数字排序条件判断Cangjie语言 一、L1-010 比较大小 题目描述:给定3个整数,要求将它…...
C++趣味编程玩转物联网:用树莓派Pico实现一位数码管动态显示
七段数码管是一种经典的电子显示器件,广泛应用于数字时钟、电子仪表等设备。本文将通过树莓派Pico开发板,介绍如何用C代码控制一位七段数码管显示数字。作为一个嵌入式开发项目,这不仅是初学者理解数码管工作原理的好机会,也是C开…...
SPA 单页面深入解读:优劣势剖析及实现方法
SPA(Single Page Application)单页面应用 什么是 SPA? SPA(Single Page Application,单页面应用)是一种 Web 应用程序,它通过 JavaScript 动态更新单一页面上的内容,而不是像传统的多页面应用程序那样每次用户与应用交互时都请求一个新的 HTML 页面。通过使用 AJAX 请…...
机器学习系列----关联分析
目录 1. 关联分析的基本概念 1.1定义 1.2常用算法 2.Apriori 算法的实现 2.1 工作原理 2.2 算法步骤 2.3 优缺点 2.4 时间复杂度 2.5实际运用----市场购物篮分析 3. FP-Growth 算法 3.1 工作原理 3.2 算法步骤 3.3 优缺点 3.4 时间复杂度 3.5实际运用——网页点…...
json数据四大加载方式
效果: 一、使用 import 静态加载 JSON 原理 使用 ES 模块的 import 语法直接引入 JSON 文件。Webpack/Vite 等构建工具会将 JSON 文件解析成 JavaScript 对象。 优点 简单直接,适合静态数据。不需要额外的网络请求。数据会随着打包文件一起部署。 缺点 J…...
JavaScript 中的数组(Array)对象的内置方法
JavaScript 中的数组(Array)对象提供了许多内置方法,用于对数组进行创建、操作、遍历和搜索等操作。以下是一些常用的数组方法及其简要说明: 创建和初始化数组 Array(): 创建一个新的空数组,或者根据提供的参数创建一…...
网络安全之国际主流网络安全架构模型
目前,国际主流的网络安全架构模型主要有: ● 信息技术咨询公司Gartner的ASA(Adaptive Security Architecture自适应安全架构) ● 美国政府资助的非营利研究机构MITRE的ATT&CK(Adversarial Tactics Techniques &…...
电子应用设计方案-16:智能闹钟系统方案设计
智能闹钟系统方案设计 一、系统概述 本智能闹钟系统旨在为用户提供更加个性化、智能化和便捷的闹钟服务,帮助用户更有效地管理时间和起床。 二、系统组成 1. 微控制器 - 选用低功耗、高性能的微控制器,如 STM32 系列,负责整个系统的控制和数据…...
【FRP 内网穿透 从0到1 那些注意事项】
【摘要】 最近跟第三方团队调试问题,遇到一个比较烦的操作。就是,你必须要发个版到公网环境,他们才能链接到你的接口地址,才能进行调试。按理说,也没啥,就是费点时间。但是,在调试的时候&#…...
力扣 LRU缓存-146
LRU缓存-146 /* 定义双向链表节点,用于存储缓存中的每个键值对。 成员变量:key和value存储键值对。preb和next指向前一个和后一个节点,形成双向链表。 构造函数:默认构造函数:初始化空节点。参数化构造函数࿱…...
Elasticsearch简介与实操
Elasticsearch是一个分布式、高扩展、高实时的搜索与数据分析引擎。以下是对Elasticsearch的详细介绍: 一、基本概述 Elasticsearch是Elastic Stack(以前称为ELK Stack)的核心组件,Logstash和Beats有助于收集、聚合和丰富数据并将…...
用python将一个扫描pdf文件改成二值图片组成的pdf文件
使用墨水屏读书现在似乎越来越流行,这确实有一定的好处,例如基本不发热,电池续航时间超长,基本不能游戏所以有利于沉浸式阅读,还有不知道是不是真的有用的所谓防蓝光伤害。但是,如果阅读的书籍是扫描图片组…...
Failed to start Docker Application Container Engine
说明: 1)访问应用业务,读取不到数据,show databases;查看数据库报错 2)重启docker服务,服务启动失败,查看日志报错如下图所示 3)报错信息:chmod /data/docker: read-only…...
ESLint的简单使用(js,ts,vue)
一、ESLint介绍 1.为什么要用ESLint 统一团队编码规范(命名,格式等) 统一语法 减少git不必要的提交 减少低级错误 在编译时检查语法,而不是等js引擎运行时才检查 2.eslint用法 可以手动下载配置 可以通过vue脚手架创建项…...
实景三维赋能国土空间智慧治理
随着城市化进程的不断推进,国土空间的合理规划与高效管理成为政府面临的一项重大挑战。在这个过程中,实景三维技术作为一种新兴的信息技术手段,正在逐渐改变传统国土空间治理的方式,为智慧城市的建设提供了新的可能。本文旨在探讨…...
树链剖分(重链剖分)
树链剖分的核心思想就是将一棵树剖分成一条一条的链 因为树不好处理 但链比较好处理 为了学会它 我们先要学会树上dfs(深度优先搜索) 然后就没了(雾) Because 树链剖分需要用到两个dfs 哦对了 我们还要了解以下的知识点 1.子…...
Wireshark深度解析:HTTP/1.1协议层隐写与pcapng元数据取证
1. 这不是一次普通的数据包分析,而是一场“协议层藏宝游戏”Wireshark实战:解密http1.pcapng中的隐藏flag——光看标题,你可能以为这只是又一篇教你怎么点开Filter框、输http然后截图的入门教程。但实际操作中,我连续三次在http1.…...
焦度计的柱镜值是怎么算出来的
项目一直卡在柱镜值的准确性和重复性这里,柱镜值究竟要怎么写代码才能算出来啊?...
(C语言)指针详解与应用
指针是C语言的灵魂,指针与底层硬件联系紧密,使用指针可操作数据的地址,实现数据的间接访问。指针即指针变量,用于存放其他数据单元,如变量、数组、结构体和函数的首地址。若指针存放了某个数据单元的首地址,…...
SABIC塑料解决方案:宏裕塑胶全面代理原GE塑料高性能材料产品
宏裕塑胶依托源头直采优势整合沙伯基础创新SABIC等国际品牌资源,为制造业客户提供高性价比通用工程塑料原料及全流程技术支撑,助力企业降本增效。其代理产品涵盖PETG、PCTG、PBT、TPEE等全品类工程塑料,专为塑胶制品厂、汽车零部件厂等客户群…...
IPBan服务器防护解决方案:智能拦截恶意IP的实战指南
IPBan服务器防护解决方案:智能拦截恶意IP的实战指南 【免费下载链接】IPBan Since 2011, IPBan is the worlds most trusted, free security software to block hackers and botnets. With both Windows and Linux support, IPBan has your dedicated or cloud serv…...
编程语言对比:从C到Python
好的,我将为你清晰介绍这几种编程语言的主要区别:1. C语言定位:面向过程的系统级编程语言。特点:接近硬件,可直接操作内存(如指针)。语法简洁,无面向对象特性。应用场景:…...
毕业设计 深度学习动物识别系统(源码+论文)
文章目录 0 前言1 项目运行效果1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 …...
Midjourney阿盖洛印相实战手册(从暗房哲学到AI指令映射):12个被官方文档刻意隐藏的--stylize与--chaos协同公式
更多请点击: https://codechina.net 第一章:Midjourney阿盖洛印相的暗房哲学溯源 阿盖洛印相(Argyrotype)作为19世纪末由William Willis发明的铁银工艺变体,以硝酸银与有机银络合物在明胶或纤维素基质中光解还原为核心…...
AI for Science:从数据驱动到科学发现,构建科研新范式
1. 从AlphaFold到GPT-3:AI如何成为科学家的“新感官”如果你是一位从事物理、化学、生物或材料科学的研究者,最近几年可能时常被一种复杂的情绪所包围:一方面是兴奋,看到像AlphaFold2这样的人工智能工具,几乎一夜间解决…...
MCP电路设计:从门电路到CPLD的优先级仲裁硬件实现
1. 项目概述:从“命令打架”到“有序排队”的电路设计在嵌入式系统、工业控制或者任何需要处理多路信号的数字电路里,我们经常会遇到一个头疼的问题:当多个输入信号同时要求一个输出设备执行不同动作时,系统该听谁的?比…...
