21 re正则模块 垃圾回收机制
垃圾回收机制
不能被程序访问到的数据,就称之为垃圾
1)引用计数
引用计数:用来记录值的内存地址被记录的次数的;当一个值的引用计数为0时,该值就会被系统的垃圾回收机制回收
每一次对值地址的引用都可以使该值的引用计数 +1
每一次对值地址的释放都可以使该值的引用计数 -1
2)循环导入
循环导入会导致某些值得引用计数永远大于0 => 内存泄漏
ls1 = [666]
ls2 = [888] ls1.append(ls2) # >>>[666, [888, [...]]] ls2.append(ls1) # >>>[888, [666, [...]]]
3)标记删除
标记:遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),
然后将所有可以直接或间接访问到的GC Roots对象标记为存活的对象,存放到新的内存空间中
删除:遍历堆中所有的对象,将之前所有的内容全部清除
4)分代回收
分代:指的是根据存活时间来为变量划分不同等级(也就是不同的代)
回收:依然是使用引用计数作为回收的依据
1、新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,那么该对象的权重(本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,
2、青春代的gc扫描的频率低于新生代(扫描时间间隔更长),假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,接下来,青春代中的对象,也会以同样的方式被移动到老年代中。
3、也就是等级(代)越高,被垃圾回收机制扫描的频率越低
正则
带语法的字符串,用来匹配目标字符串得到想要的字符串结果
|
# 语法:
# 1.单个字符
# \d == [0-9]
# \D == [^0-9]
# \w == 字母+数字+_
# [0-9A-Za-z] == 所有字母+数字
# . == 匹配所有单个字符(刨除换行) # 2.多个字符
# zo* == zo{0,}
# zo+ == zo{1,}
# zo? == zo{0,1} # 应用
# 匹配多个zo:zozozozo
# (?:zo){1,} # 3.多行
# ^: 以什么开头 $: 以什么结尾 结合 flags=re.M 可以按\n来完成多行匹配
# re.S:将\n也能被.匹配 re.I:不区分大小写 re.M:结合^ $来使用,完成多行匹配
# 4.分组 # 1.从左往右数数 ( 进行编号,自己的分组从1开始,group(0)代表匹配到的目标整体
# 2.(?: ... ):取消所属分组,()就是普通(),可以将里面的信息作为整体包裹,但不产生分组 import re
regexp = re.compile('(?:(?:http://)(.+)/)') # 生成正则对象
target = regexp.match('http://www.baidu.com/')
print(target.group(1)) # www.baidu.com # 5.拆分
print(re.split('\s', '123 456\n789\t000')) # 6.替换
# 1.不参与匹配的原样带下 2.参与匹配的都会被替换为指定字符串
# 3.在指定字符串值\num拿到具体分组 4.其他字符串信息都是原样字符串
print(re.sub('《(?:[a-z]+)(\d+)(.{2})', r'\\2abc\2\1', '《abc123你好》'))
首先介绍的是re模块的findall方法,该方法用于从字符串中获取所有匹配成功的内容:
import re
res = re.findall("表达式","字符串内容")
res = re.findall("\w","hello python")
res = re.findall("^http://","http://www.baidu.com\nhttp://www.sina.com.cn", re.M)
# 该方法得到一个列表
print(res)
# 单个字符匹配 \w \W \s \S \d \D . \r \n \t
单个字符匹配
# 指定匹配范围 a|b|c [abc] [^abc] [a-z] [a-zA-Z0-9] 注意当 -需要作为普通字符时必须写在最前面或最后面
指定匹配范围
# 匹配次数 {a} {b,} {a,b} \* ?
匹配次数
# 位置匹配 ^ $ \d \B
位置匹配
# 贪婪模式 默认情况下+和*将尽可能多的匹配内容 \+ * # 非贪婪模式 将尽可能少的匹配内容,当?出现在其他的重复次数后面时会将贪婪模式改为非贪婪模式。 ? 如 abc.*? abc.+?
贪婪模式 | 非贪婪模式
# 分组 用于单独获取某一部分匹配的内容 (表达式)获取匹配的 (?:表达式) 不获取匹配的 补充: #匹配模式:.不能匹配换行符
content='''Hello 123456 World_This
is a Regex Demo
'''
# res=re.match('He.*?(\d+).*?Demo$',content)
# print(res) #输出None # res=re.match('He.*?(\d+).*?Demo$',content,re.S) #re.S让.可以匹配换行符
# print(res)
# print(res.group(1))
分组
# re模块其他函数 search 仅获取第一个匹配的内容 match 从字符串开始处开始匹配 compile 得到一个的表达式对象,后期可以重复使用 split 使用正则表达式来切分字符串 ```python
re.split("[:\/\\]","a:b/c\d/f")
``` sub 普通替换与字符串的替换没有区别 print(re.sub("python","PYTHON","python asasasaasa python")) 正则替换 只替换后面的python print(re.sub("(python)(.*)(python)",r"\1\2PYTHON","python asasasaasa python")) # 练习 - 编写验证身份证的正则
- 编写验证手机号的正则
- 编写验证邮箱地址的正则
re模块其他函数
21 re正则模块 垃圾回收机制的更多相关文章
- RE模块垃圾回收机制
今日内容 一.垃圾回收机制 函义:不能被程序访问到的数据,就称之为垃圾 1.引用计数 引用计数是用来记录值的内存地址被记录的次数的 每一次对值地址的引用都可以使该值的引用计数 +1 每一次对值地址的 ...
- (IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
参考博客: https://www.cnblogs.com/xiao987334176/p/9056511.html 内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yi ...
- python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...
- [CLR via C#]21. 自动内存管理(垃圾回收机制)
目录 理解垃圾回收平台的基本工作原理 垃圾回收算法 垃圾回收与调试 使用终结操作来释放本地资源 对托管资源使用终结操作 是什么导致Finalize方法被调用 终结操作揭秘 Dispose模式:强制对象 ...
- DAY20、垃圾回收机制,正则模块
一.垃圾回收机制1.不能被程序访问到的数据,就称之为垃圾2.引用计数:每一次对值地址的引用都可以使该值得引用计数加1 每一次对值地址的释放都可以使该值得引用计数减一 当一个值的引用计数为0时,该值就会 ...
- 【Python】 垃圾回收机制和gc模块
垃圾回收机制和gc模块 Py的一个大好处,就是灵活的变量声明和动态变量类型.虽然这使得学习py起来非常方便快捷,但是同时也带来了py在性能上的一些不足.其中相关内存比较主要的一点就是py不会对已经销毁 ...
- day 21 垃圾回收机制、标记删除及分代回收
垃圾回收机制 # 不能被程序访问到的数据,就称之为垃圾 引用计数 # 引用计数是用来记录值的内存地址被记录的次数的# 每一次对值地址的引用都可以使该值的引用计数 +1# 每一次对值地址的释放都可以使 ...
- day21 二十一、垃圾回收机制、re正则
一.内存管理 1.垃圾回收机制:不能被程序访问到的数据称之为垃圾 2.引用计数:引用计数是用来记录值的内存地址被记录的次数 每一次对值地址的引用都可以使该值的引用计数 +1 每一次对值地址的释放都可以 ...
- Python垃圾回收机制:gc模块
在Python中,为了解决内存泄露问题,采用了对象引用计数,并基于引用计数实现自动垃圾回收. 由于Python 有了自动垃圾回收功能,就造成了不少初学者误认为不必再受内存泄漏的骚扰了.但如果仔细查看一 ...
随机推荐
- OO第一次单元总结
第一次总结性博客 16071070 陈泽寅 2019.3.23 一.第一单元所学总结 首先先来总结一下第一单元我所学到的知识以及所感所悟.第一个单元,是我第一次接触JAVA语言,并且再使用了几次之后, ...
- ionic3创建选项卡
html页面 <ion-content padding> <ion-segment [(ngModel)]="tabs"> <ion-segment- ...
- java工程师的成长历程
2019年2月 这是我站在刚入行的角度,对自己未来的发展做出的初步的规划,以后慢慢调整 一. 初级java工程师 1.熟悉java的基本语法,拥有面向对象的思维,熟悉javaSE的核心类库 2.学习j ...
- adb push 中文路径文件名丢失后缀
adb 的一个BUG. 今天刷机的时候,用以下命令多次 push 安装包到手机: adb push F:\刷机\Nexus5\lineage-14.1-20170314-nightly-hammerh ...
- 【BZOJ2721】樱花(数论)
[BZOJ2721]樱花(数论) 题面 BZOJ 题解 先化简一下式子,得到:\(\displaystyle n!(x+y)=xy\),不难从这个式子中得到\(x,y\gt n!\). 然后通过\(x ...
- crontab计划任务实例
使用实例 实例1:每1分钟执行一次command 命令: * * * * * command 实例2:每小时的第3和第15分钟执行 命令: 3,15 * * * * command 实例3:在上午8点 ...
- chrome主页篡改解决方法
网上有一个超级细致的小白教学连接,但是发现很难找到,分享一下:https://arlenluo.github.io./2017/03/12/DefeatYourBrowser 还有一种情况是要打开 & ...
- LOJ#2665 树的计数
题意:给你DFS序和BFS序,求树的期望高度. 解:先分析性质. 考虑到BFS序是分层的,DFS序的子树是一段,那么我们遍历BFS序并在DFS序上标记对应点的话,就会发现BFS序每一层都会把若干棵子树 ...
- CF487E Tourists--圆方树
既然有这条性质,这题就很简单了: \(可能在a->b的简单路径上的点集,就是圆方树上a->b路径上方点代表的点双的并集\) 对每一个方点维护一个\(multiset\),代表其在圆方树上子 ...
- 理解依赖注入,laravel IoC容器
在看laravel文档的时候,有一个服务容器(IoC)的概念.它是这样介绍的:Laravel 服务容器是一个用于管理类依赖和执行依赖注入的强大工具.依赖注入听上去很花哨,其实质是通过构造函数或者某些情 ...