Python re模块+内存管理

news/2024/7/20 15:52:50 标签: python, 内存管理

今日内容:

  • 1.垃圾回收机制
  • 2.re模块

一、垃圾回收机制

在计算机中,不能被程序访问到的数,称之为垃圾
1.1 引用计数
引用计数用来记录值的内存地址被记录的次数

每引用一次就对标记 +1 操作
每释放一次就对标记 -1 操作

当内存中的值的引用计数为 0 时,该值就会被系统的垃圾回收机制回收
1.2 引用计数的问题
# 例子
ls1 = [666]
ls2 = [888]
ls1.append(ls2)
ls2.append(ls1)

打印结果:
[666, [888, [...]]]
[888, [666, [...]]]

# 首先该语句不会执行错误,但是不会一直执行下去,
# python解释器会对结果进行处理

# ps:内存中,赋值操作只是将值的内存地址给拷贝给了变量名
# 通过查找内存地址指向的内容将值找出来。
1.3 标记删除
标记:
    标记的过程其实就是,遍历所有的GCRoots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象,存放到新的内存空间中

删除:
    删除的过程将遍历堆中所有的对象,将之前所有的内容全部清除
1.4 分代回收
分代:指的是根据存活时间来为变量划分不同等级(也就是不同的代)

    新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,
    如果发现变量依然被引用,那么该对象的权重(权重本质就是个整数)加一,
    
    当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,青春代的gc扫描的频率低于新生代(扫描时间间隔更长),
    
    假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,
    节省了扫描的总时间,接下来,青春代中的对象,
    也会以同样的方式被移动到老年代中。
    也就是等级(代)越高,被垃圾回收机制扫描的频率越低

回收:依然是使用引用计数作为回收的依据

2.正则表达式

2.1 什么是正则
正则就是带语法的字符串,用来匹配目标字符串得到想要的字符串结果
2.2 语法:
1.单个字符
\d == [0-9]
\D == [^0-9]
\w == 字母+数字+_
[0-9A-Za-z] == 所有字母+数字
. == 匹配所有单个字符(刨除换行)
import re
str1 = 'sfio29ia77y12飞范7发哦'

# 匹配单个字符
print(re.findall(r'a', str1))
# ['a']

# 匹配数字 == '\d'
print(re.findall(r'[0-9]', str1))
# ['2', '9', '7', '7', '1', '2', '7']

# 匹配非数字 效果等同于 '\D'
print(re.findall(r'[^0-9]', str1))
# ['s', 'f', 'i', 'o', 'i', 'a', 'y', '飞', '范', '发', '哦']

print(re.findall(r'\D', str1))
# ['s', 'f', 'i', 'o', 'i', 'a', 'y', '飞', '范', '发', '哦']

# 匹配字母+数字+_
print(re.findall(r'\w', str1))
# ['s', 'f', 'i', 'o', '2', '9', 'i', 'a', '7', '7', 'y', '1', '2', '飞', '范', '7', '发', '哦']

# 匹配所有字母+数字
print(re.findall(r'[0-9A-Za-z]', str1))
# ['s', 'f', 'i', 'o', '2', '9', 'i', 'a', '7', '7', 'y', '1', '2', '7']

# 匹配所有单个字符(刨除换行)
print(re.findall(r'.', str1))
# ['s', 'f', 'i', 'o', '2', '9', 'i', 'a', '7', '7', 'y', '1', '2', '飞', '范', '7', '发', '哦']
# 2.多个字符

# zo* == zo{0,}
# zo+ == zo{1,}
# zo? == zo{0,1}

import re

str2 = 'sfizzjioa201jiszzzzzji45fzzja545ijf'

# 匹配多个zz
print(re.findall(r'zz*', str2))
print(re.findall(r'zz{0,}', str2))
# ['zz', 'zzzzz', 'zz']
# ['zz', 'zzzzz', 'zz']

# 匹配一次或多次zz
print(re.findall(r'zz+', str2))
print(re.findall(r'zz{1,}', str2))
# ['zz', 'zzzzz', 'zz']
# ['zz', 'zzzzz', 'zz']

# 匹配0个或多个zz
print(re.findall(r'zz?', str2))
print(re.findall(r'zz{0,1}', str2))
# ['zz', 'zz', 'zz', 'z', 'zz']
# ['zz', 'zz', 'zz', 'z', 'zz']
# 3.多行
# ^: 以什么开头 $: 以什么结尾,结合 flags=re.M  可以按\n来完成多行匹配
# re.S:将\n也能被.匹配  re.I:不区分大小写
"""
"""
import re

str3 = 'zhangsJIansHUfhn54\nlisi'

# ^ 以什么开头
print(re.findall("^zhang", str3, flags=re.M))
# ['zhang']
# 4.分组
# 1.从左往右数数 ( 进行编号,自己的分组从1开始,group(0)代表匹配到的目标整体
# 2.(?: ... ):取消所属分组,()就是普通(),可以将里面的信息作为整体包裹,但不产生分组
import re
regexp = re.compile('(?:(http://)(.+)/)')  # 生成正则对象
target = regexp.match('http://www.baidu.com/')
print(target.group(2))  # www.baidu.com

# 5.拆分
print(re.split('\s', '12ssw 456\n789\t000'))
# ['12ssw', '456', '789', '000']
# 6.替换
# 1.不参与匹配的原样带下
# 2.参与匹配的都会被替换为指定字符串
# 3.在指定字符串值\num拿到具体分组
#  4.其他字符串信息都是原样字符串
print(re.sub('([a-z]+)(\d+)(.{2})', r'\2\1', '《abc123你好》'))
# 《123abc》

1137258-20190416231624279-1216974593.png
1137258-20190416231652143-1125892454.png
正则表达式

转载于:https://www.cnblogs.com/xt12321/p/10719776.html


http://www.niftyadmin.cn/n/959242.html

相关文章

【我所认知的BIOS】— uEFI AHCI Driver(7) — AtaAtapiPassThruSupported

【我所认知的BIOS】—> uEFI AHCI Driver(7) — AtaAtapiPassThruSupportedLightSeed5/23/2014由于宝宝刚刚出生,最近时间比较紧张,原本这篇文章也写好了有一段时间了,但是每天晚上连开机的时间都没今天才更新上来。我已经邀请到几位我的好…

python源码多平台编译_Python代码的编译

Python代码的编译 Python代码在解释执行之前,是会被编译成.pyc或者.pyo文件的,它们是中间字节码表示的文件,之后Python虚拟机才会去解释执行它们。 1、pyc文件pyc是一种二进制文件,是由py文件经过编译后,生成的文件&am…

程序员和产品经理之间的恩怨情仇

阅读本文大概需要 5 分钟。我本来是一个程序猿,我转行做产品经理是为了"报复 "社会,因为我曾经被伤害过…… 段子1程序员和产品经理上了火车…… 一个年轻的程序员和一个产品经理登上了一列在山里行驶的火车,他们发现列车上几乎都坐…

python文件编译_Python3.x那些事儿:[43]预编译python文件

为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版本号。例如在CPython 发行版3.4中,fibo.py文件的预编译文件就是…

巨杉数据库助力民生银行、恒丰银行云化架构升级

2019独角兽企业重金招聘Python工程师标准>>> 作为一款金融级分布式关系型数据库,SequoiaDB巨杉数据库的分布式数据库架构和面向微服务的云化产品形态,已经帮助包括民生银行、恒丰银行在内的多家大型金融客户实现了大量业务系统的底层数据库云…

springboot访问静态页面404_网站404是什么原因,网站404怎么解决

404对于SEO的影响是非常严重的。一旦处理不当网站就会被K,轻微的是降权。所以死链接的处理一定要用正规的处理方式。而更加重要的就是预防404,因为企赢SEO优化那么多网站从来没有出现过死链接这东西。首先我们要知道404出现的原因有哪些,才能…

青春献给996,晚年相亲夕阳红......

近来,996工作制频繁上热门,很多企业家都参与了讨论,网络上也出现了“百家争鸣”的状况。 所谓的996工作制,就是每天工作的时间为早上九点到晚上九点,一周上班六天。 对此,我认为努力应该是每个人的选择&…

【我所认知的BIOS】— uEFI AHCI Driver(8) — Pci.Read()

【我所认知的BIOS】—> uEFI AHCI Driver(8) — Pci.Read()LightSeed6/19/2014社会一直在变,不晓得是不是社会变的太苦开,而我没变所以我反而显得单纯了。办一个居住证,几年前办的以为终于可以一劳永逸的,后来续办的是发现确实…