Python 入门基础18 --re模块+内存管理
今日内容:
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》
Python 入门基础18 --re模块+内存管理的更多相关文章
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- Python 入门基础6 --字符编码、文件操作1
今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...
- Python入门基础学习 二
Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...
- 【CUDA 基础】4.2 内存管理
title: [CUDA 基础]4.2 内存管理 categories: - CUDA - Freshman tags: - CUDA内存管理 - CUDA内存分配和释放 - CUDA内存传输 - 固 ...
- Python 入门之 内置模块 -- re模块
Python 入门之 内置模块 -- re模块 1.re 模块 (1)什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类 ...
- Python 入门之 内置模块 -- collections模块
Python 入门之 内置模块 -- collections模块 1.collections -- 基于Python自带的数据类型之上额外增加的几个数据类型 from collections 在内 ...
- Python 入门之 内置模块 -- sys模块
Python 入门之 内置模块 -- sys模块 1.sys模块 sys模块是与python解释器交互的一个接口 print(sys.path) #模块查找的顺序 print(sys.argv) # ...
- Python 入门之 内置模块 -- datetime模块
Python 入门之 内置模块 -- datetime模块 1.datetime模块 from datetime import datetime (1)datetime.now() 获取当前时间和日期 ...
- Objective-C 基础教程第九章,内存管理
目录 Object-C 基础教程第九章,内存管理 前言: 对象生命周期 引用计数 RetainCount1项目例子 对象所有权 访问方法中的保留和释放 自动释放 所有对象放入池中 自动释放池的销毁时间 ...
随机推荐
- linux ACL权限
利用这两个指令就可以了: getfacl:获取某個文件的 ACL 设置 setfacl:设置某個文件的 ACL 规范 [root@study ~]# setfacl [-bkRd] [{-m|-x} ...
- BZOJ1124 POI2008枪战Maf(环套树+贪心)
每个点出度都为1,可以发现这张图其实是个环套树森林,树中儿子指向父亲,环上边同向. 首先自环肯定是没救的,先抬出去. 要使死亡人数最多的话,显然若一个点入度为0其不会死亡,而一个孤立的环至少会留下一个 ...
- npm指向淘宝源
临时 npm --registry https://registry.npm.taobao.org install express1 持久 npm config set registry https: ...
- hdu 3949 XOR (线性基)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意: 给出n个数,从中任意取几个数字异或,求第k小的异或和 思路: 线性基求第k小异或和,因为题 ...
- MT【24】一道五次方程的求根题
解答: 评:一般的五次及以上的多项式方程是无根式解的,只能用计算机去精确到某某位.但是特殊的比如$x^5=1$显然有根式解,本题就是一个不平凡的特殊的例子,这里的代换用于求解三次方程的求根过程是一样的 ...
- 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等
今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心,所有链接指向GitHub,微信不能直接打开,老规矩,可以用电脑打开. 关注公众号「Pyth ...
- HTMLUnit web测试
httpClient不能动态执行网页中的js,这样无法获取js生成的动态网页.htmlUnit是个解决方法. if you’re considering web application testing ...
- “由于下列错误,Parallel port driver 服务启动失败”,注意了
最近在“事件查看器”中发现这么一个错误:“由于下列错误,Parallel port driver 服务启动失败”, 我到网上搜索了一下,发现很多网页上都说解决办法: 把HKEY_LOCAL_MACHI ...
- spoj QTREE - Query on a tree(树链剖分+线段树单点更新,区间查询)
传送门:Problem QTREE https://www.cnblogs.com/violet-acmer/p/9711441.html 题解: 树链剖分的模板题,看代码比看文字解析理解来的快~~~ ...
- my soft
s 版本 61.0.3163.100(正式版本) (64 位) chrome://settings/content/flash 允许网站运行 Flash,多开闭几次,即可. soft / ul ...