当前位置: 首页 > news >正文

Python高级语法与正则表达式

Python提供了 with 语句的写法,既简单又安全。

文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。

# 1、以写的方式打开文件
with open('1.txt', 'w') as f:# 2、读取文件内容f.write('hello world')

生成器的创建方式

生成器推导式

与列表推导式类似,只不过生成器推导式使用小括号 。

# 创建生成器
my_generator = (i * 2 for i in range(5))
print(my_generator)# next获取生成器下一个值
# value = next(my_generator)
# print(value)# 遍历生成器
for value in my_generator:print(value)

next 函数获取生成器中的下一个值
for  循环遍历生成器中的每一个值 

 

yield生成器

yield 关键字生成器的特征:在def函数中具有yield关键字

def generator(n):for i in range(n):print('开始生成...')yield iprint('完成一次...')g = generator(5)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))				----->    正常
print(next(g))  			----->    报错
Traceback (most recent call last):File "/Users/cndws/PycharmProjects/pythonProject/demo.py", line 14, in <module>print(next(g))
StopIteration
def generator(n):for i in range(n):print('开始生成...')yield iprint('完成一次...')g = generator(5)
for i in g:print(i)

开始生成...
0
完成一次...
开始生成...
1
完成一次...
开始生成...
2
完成一次...
开始生成...
3
完成一次...
开始生成...
4
完成一次...

注意点:

代码执行到 yield 会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行

② 生成器如果把数据生成完成,再次获取生成器中的下一个数据会抛出一个StopIteration 异常,表示停止迭代异常

③ while 循环内部没有处理异常操作,需要手动添加处理异常操作

④ for 循环内部自动处理了停止迭代异常

yield关键字和return关键字

如果不太好理解yield,可以先把yield当作return,他们都在函数中使用,并履行着返回某种结果的职责。

这两者的区别是:

return的函数直接返回所有结果,程序终止不再运行,并销毁局部变量;

而有yield的函数则返回一个可迭代的 generator(生成器)对象,可以使用for循环或者调用next()方法遍历生成器对象来提取结果。

def example():x = 1y = 10while x < y:yield xx += 1example = example()
print(example)

yield与斐波那契数列

数学中有个著名的斐波拉契数列)

要求:数列中第一个数为0,第二个数为1,其后的每一个数都可由前两个数相加得到:

例子:1, 1, 2, 3, 5, 8, 13, 21, 34, ...

现在我们使用生成器来实现这个斐波那契数列,每次取值都通过算法来生成下一个数据,生成器每次调用只生成一个数据,可以节省大量的内存。

def fib(max): n, a, b = 0, 0, 1 while n < max: yield b      # 使用 yield# print b a, b = b, a + b n = n + 1for n in fib(5): print n

什么是正则表达式

正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

模式:一种特定的字符串模式,这个模式是通过一些特殊的符号组成的。 某种:也可以理解为是一种模糊匹配。

精准匹配:select * from blog where title='python';

模糊匹配:select * from blog where title like ‘%python%’;

正则表达式并不是Python所特有的,在Java、PHP、Go以及JavaScript等语言中都是支持正则表达式的。

正则表达式的功能

① 数据验证(表单验证、如手机、邮箱、IP地址)

② 数据检索(数据检索、数据抓取)

③ 数据隐藏(1356235 王先生)

④ 数据过滤(论坛敏感关键词过滤)

什么是re模块

在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个re模块

# 第一步:导入re模块
import re
# 第二步:使用match方法进行匹配操作
result = re.match(pattern正则表达式, string要匹配的字符串, flags=0)
# 第三步:如果数据匹配成功,使用group方法来提取数据
result.group()

match函数参数说明:

参数描述
pattern匹配的正则表达式
string要匹配的字符串。
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配数据。

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配,这个功能是为了支持多语言版本的字符集使用环境的,比如在转义符\w,在英文环境下,它代表[a-zA-Z0-9_],即所以英文字符和数字。如果在一个法语环境下使用,缺省设置下,不能匹配"é" 或 "ç"。加上这L选项和就可以匹配了。不过这个对于中文环境似乎没有什么用,它仍然不能匹配中文字符。
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.XVERBOSE,冗余模式, 此模式忽略正则表达式中的空白和#号的注释,例如写一个匹配邮箱的正则表达式。该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

re模块的相关方法

re.match(pattern, string, flags=0)

  • 从字符串的起始位置匹配,如果匹配成功则返回匹配内容, 否则返回None

☆ re.findall(pattern, string, flags=0)

  • 扫描整个串,返回所有与pattern匹配的列表

  • 注意: 如果pattern中有分组则返回与分组匹配的列表

  • 举例: re.findall("\d","chuan1zhi2") >> ["1","2"]

☆ re.finditer(pattern, string, flags)

  • 功能与上面findall一样,不过返回的时迭代器

参数说明:

  • pattern : 模式字符串。

  • repl : 替换的字符串,也可为一个函数。

  • string : 要被查找替换的原始字符串。

  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

  • flags: 匹配方式:

    • re.I 使匹配对大小写不敏感,I代表Ignore忽略大小写

    • re.S 使 . 匹配包括换行在内的所有字符

    • re.M 多行模式,会影响^,$

案例1:查找一个字符串中是否具有数字“8”  

import reresult = re.findall('8', '13566128753')
# print(result)
if result:print(result)
else:print('未匹配到任何数据')

 案例2:查找一个字符串中是否具有数字

import reresult = re.findall('\d', 'a1b2c3d4f5')
# print(result)
if result:print(result)
else:print('未匹配到任何数据')

案例3:查找一个字符串中是否具有非数字

import reresult = re.findall('\D', 'a1b2c3d4f5')
# print(result)
if result:print(result)
else:print('未匹配到任何数据')

正则表达式编写:查什么、查多少、从哪查

1、查什么

代码功能
.(英文点号)匹配任意1个字符(除了\n)
[ ]匹配[ ]中列举的某个字符,专业名词 => 字符簇
[^指定字符]匹配除了指定字符以外的其他某个字符,^专业名词 => 托字节
\d匹配数字,即0-9
\D匹配非数字,即不是数字
\s匹配空白,即 空格,tab键
\S匹配非空白
\w匹配非特殊字符,即a-z、A-Z、0-9、_
\W匹配特殊字符,即非字母、非数字、非下划线

字符簇常见写法:

① [abcdefg] 代表匹配abcdefg字符中的任意某个字符(1个)

② [aeiou] 代表匹配a、e、i、o、u五个字符中的任意某个字符

③ [a-z] 代表匹配a-z之间26个字符中的任意某个

④ [A-Z] 代表匹配A-Z之间26个字符中的任意某个

⑤ [0-9] 代表匹配0-9之间10个字符中的任意某个

⑥ [0-9a-zA-Z] 代表匹配0-9之间、a-z之间、A-Z之间的任意某个字符

字符簇 + 托字节结合代表取反的含义:

① [^aeiou] 代表匹配除了a、e、i、o、u以外的任意某个字符

② [^a-z] 代表匹配除了a-z以外的任意某个字符

\d 等价于 [0-9], 代表匹配0-9之间的任意数字

\D 等价于 [^0-9],代表匹配非数字字符,只能匹配1个

2、查多少

代码功能
*匹配前一个字符出现0次或者无限次,即可有可无(0到多)
+匹配前一个字符出现1次或者无限次,即至少有1次(1到多)
?匹配前一个字符出现1次或者0次,即要么有1次,要么没有(0或1)
{m}匹配前一个字符出现m次,匹配手机号码\d{11}
{m,}匹配前一个字符至少出现m次,\w{3,},代表前面这个字符最少要出现3次,最多可以是无限次
{m,n}匹配前一个字符出现从m到n次,\w{6,10},代表前面这个字符出现6到10次

基本语法:

正则匹配字符.或\w或\S + 跟查多少

如\w{6, 10}

如.*,匹配前面的字符出现0次或多次

3、从哪查

代码功能
^匹配以某个字符串开头
$匹配以某个字符串结尾

正则工具箱 :

正则表达式代码生成工具 等

 

相关文章:

Python高级语法与正则表达式

Python提供了 with 语句的写法&#xff0c;既简单又安全。 文件操作的时候使用with语句可以自动调用关闭文件操作&#xff0c;即使出现异常也会自动关闭文件操作。 # 1、以写的方式打开文件 with open(1.txt, w) as f:# 2、读取文件内容f.write(hello world) 生成器的创建方…...

【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解&#x1f30f;题目描述&a…...

Python如何将图片转换成字符

PIL(Python Image Library)库是Python平台上一个功能强大的图像处理标准库&#xff0c;支持图像的存储、显示和处理&#xff0c;几乎可以处理所有图片格式&#xff0c;如图像的压缩、裁剪、叠加、添加文字等等。 安装PIL库:pip install pillow from PIL import Image ascii_cha…...

国家开放大学形成性考核 统一资料 参考试题

试卷代号&#xff1a;1174 水工钢筋混凝土结构&#xff08;本&#xff09;参考试题 一、选择题&#xff08;每小题2分&#xff0c;共20分&#xff0c;在所列备选项中&#xff0c;选1项正确的或最好的作为答案&#xff0c;将选项号填入各题的括号中&#xff09; 1.钢筋混凝土结…...

4.7 【共享源】流的生产者(二)

七,模式 流的模式决定了Screen如何使前台缓冲区可用。生产者通过调用screen_set_stream_property_iv()并设置SCREEN_PROPERTY_MODE属性来设置模式。有效模式如下: 7.1 SCREEN_STREAM_MODE_DEFAULT 如果生产者应用程序没有在流上明确设置 SCREEN_PROPERTY_MODE 属性,则 Sc…...

流量录制回放工具在自动化测试领域应用探索

引言&#xff1a; 随着中国农业银行技术架构的日益更迭与业务场景的不断创新&#xff0c;测试工作正在面临数据构造繁琐、案例维护成本较高且质量参差不齐等诸多问题与挑战&#xff0c;主要体现在以下四方面&#xff1a; 一是在系统架构升级与代码重构时&#xff0c;大量原始接…...

【高数定积分求解旋转体体积】 —— (上)高等数学|定积分|柱壳法|学习技巧

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 Shell method Setting up the Integral 例题 Example 1: Example 2: Example 3: Example …...

Ubuntu20.04 及深度学习环境anaconda、cuda、cudnn、pytorch、paddle2.3安装记录

学习目标&#xff1a; Ubuntu20.04下装好torch、paddle深度学习环境。 选择的版本环境是 &#xff1a;最新的nvidia驱动、cuda 11.1 、cudnn v8.1.1&#xff0c;下面会说为啥这么选。 学习内容&#xff1a; 1. Ubuntu20.04仓库换源 本节参考Ubuntu 20.04 Linux更换源教程 2…...

场景切割CVPr2022 SceneSegmentation

目录 算法介绍 无监督训练原理 源码地址: lstm模块 bilstm opencv场景分割 加阈值:...

Spring Cloud Feign作为HTTP客户端调用远程HTTP服务

如果你的项目使用了SpringCloud微服务技术,那么你就可以使用Feign来作为http客户端来调用远程的http服务。当然,如果你不想使用Feign作为http客户端,也可以使用比如JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client或者Spring的RestTemplate。 那么,为…...

[node] Node.js的文件系统

[node] Node.js的文件系统 文件系统的使用异步和同步input.txt示例 常用方法打开文件语法示例 获取文件信息语法示例 写入文件语法示例 读取文件语法示例 关闭文件语法示例 截取文件语法示例 删除文件语法示例 创建目录语法示例 读取目录语法示例 删除目录语法示例 文件模块方法…...

【Linux系统基础】(2)在Linux上部署MySQL、RabbitMQ、ElasticSearch、Zookeeper、Kafka、NoSQL等各类软件

实战章节&#xff1a;在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c;…...

CJson 使用 - 解析Object结构

简介 准备在开发板中使用json结构传送数据, 选用了cJson, 现在看下cJson的使用吧步骤 下载 git clone https://github.com/DaveGamble/cJSON 或者直接压缩包下载也行, 毕竟国内有时候下载不下来Qt 中使用cJson 在下载的cJson 目录中加入cJson.pri, 内容如下 INCLUDEPATH …...

MySQL8主主搭建

-- mysql8 主主搭建 mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz 主1 &#xff1a; 192.168.2.160 主2 &#xff1a; 192.168.2.161 --解压mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz为mysql8 -- 初始化mysql8 &#xff08;略&#xff09; -- 参数192.168.2.160 [root…...

使用Pycharm一键将.ui文件生成.py文件配置教程、一键打开QTDesigner教程

2df3621a-7ffd-4f18-9735-b86464b83a5b 前言 我痛恨所有将白嫖归为理所应当的猪&#x1f416;。 教程 打开pycharm之后&#xff0c;依次点击File->Settings->Tools->External Tools&#xff0c;进入如下界面&#xff1a; 1、配置快捷打开Qt Designer 点击号&…...

React 路由跳转

1. push 与 replace 模式 默认情况下&#xff0c;开启的是 push 模式&#xff0c;也就是说&#xff0c;每次点击跳转&#xff0c;都会向栈中压入一个新的地址&#xff0c;在点击返回时&#xff0c;可以返回到上一个打开的地址&#xff0c; 就像上图一样&#xff0c;我们每次返…...

【MySQL】数据处理:从SQL批量删除报错到Python优雅解决

一、背景 MySQL数据库表中有一批重复的脏数据,为不影响正常业务,需要进行批量删除。 二、SQL批量删除 首先想到的是编写SQL语句来批量删除:删除身份证号为51****59且ID不为5的全部数据(保留ID为5的那一条数据) DELETE FROM test_table WHERE id IN ( SELECT i…...

Rust 软件测试

Rust 第18节 软件测试 测试已写的函数 在创建每一个lib crate时&#xff0c;rust都会自动生产一个测试 mod;名字为tests; tests mod 被属性 #[cfg(test)] 修饰&#xff0c;用于测试&#xff1b; 在mod 内&#xff0c;需要在函数头上加属性 #[test]进行修饰&#xff0c;让其变为…...

win11下配置visual studio 2022+PCL1.13.1

第一部分&#xff1a;visual studio2022 安装 vs官网网址如下&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 第一步&#xff1a;我们打开官网链接&#xff0c;按如下操作点击下载免费版本的exe文件 第二步&#xff1a;打开下载目录下的安装文件进行安装&#…...

智能优化算法应用:基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.法医调查算法4.实验参数设定5.算法结果6.…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...