进阶语法
上下文管理器
概述
一个类只要实现了
__enter__()
__exit__()
它就是 上下文管理器类 它的对象称之为 上下文管理器对象
with语法解释
格式
with上下文管理器对象:
代码块
特点
当with的代码执行完毕后 会自动释放 上下文管理器对象
原理
with语句执行前 会自动调用上下文管理器对象的
__enter__()
初始化
创建对象用
with语句执行后 会自动调用上下文管理器对象
__exit__()
释放资源
案例
自定义MyFlie类 模拟open()函数 实现读写文件操作
生成器
概述
Generator 基于一定的规则来生成数据 但是不是一次 而是用一批生成一批 这样做可以降低内存占用
好处
降低内存
如何查看容器类型 内存占用情况
import sys
result = sys.getsizeof(对象)
print(result)
例子 :
import sys
list_num = [i for i in range(10000)]
list_num2 = (i for i in range(10000))
s1 = sys.getsizeof(list_num)
s2 = sys.getsizeof(list_num2)
print(s1, type(list_num))
print(s2, type(list_num2))
s1打印结果: 85176 <class 'list'>
s2打印结果: 192 <class 'generator'>
格式
推导式写法
g1 = (i for i in range(10))
yield 关键字
记录数据
并把数据存储到生成器对象中
程序没有执行结束前会阻塞 程序结束会将结果生成器对象 返回
如何获取生成器中的数据
方式一
next()
方式二
for循环
案例
生成批次数据
扩展迭代器
property介绍
概述
它可以修饰函数 实现把函数当做变量来用
目的/好处
简化编程
用法格式
充当解释器
@property
def age(self):
return self.age
@age.setter
def age(self, age):
self.__age = age
修饰类变量
get 和set方法不变
age = property(get_age, set_age)
测试
s= Student()
print(s.age)
s.age = 30
print(s.age)
正则表达式
概述
正确的 符合特定规则的字符串 -> 正则表达式
Regular Expresion -> re模块
细节
关于正则规则 多用 就慢慢记住了
正则不独属于哪个语言
Pyonthon中的正则
math()
search()
complie().sun()
简写成:sub()
回顾replace()
语法
1.导包
import re
2.正则匹配 查找 替换
result = re.math(正则,,要检验的字符串, flags)
全瓷匹配
result = re.search(正则.要校验的字符串,flags)
查找 分段匹配
result= compile(正则表达式).sub(新字符串,旧字符串)
替换
3.result.group()
获取到正则处理结果
正确规则
字符串
a 代表: 1个普通的字符a, 你还可以写 b, c, abc, 就是普通字符的意思.
. 代表: 任意的1个字符, 除了换行等.
\. 代表: 1个普通的. 一般邮箱中用
[abc] 代表: a,b,c任意的1个字符
[^abc] 代表: 除了a,b,c外, 任意的1个字符
\d 代表: 任意的1个数字, 等价于: [0-9]
\D 代表: 任意的1个非数字, 等价于: [^0-9]
\s 代表: 空白字符, \t, 空格, \n...
\S 代表: 非空白字符(\s取反)
\w 代表: 单词字符(非特殊字符), 即: 数字, 字母, 下划线, 汉字, 等价于: [a-zA-Z0-9_]
\W 代表: 特殊字符, 上述取反.
首尾标记符
^
$
数量词
? 代表: 前边的内容出现 0次或者1次
* 代表: 前边的内容出现 0 - n次, 至少0次, 至多n次
+ 代表: 前边的内容出现 1 ~ n次, 至少1次, 至多n次
{n} 代表: 前边的内容 恰好出现 n次
{n,} 代表: 前边的内容 至少出现n次, 至多无所谓
{n,m} 代表: 前边的内容 至少n次, 至多m次, 包括n和m
分组相关
|
或
()
分组 默认最外层是 第0组
\n
(\n):这是一个普通的捕获组(capturing group),用于匹配换行符 \n。捕获组可以用于捕获匹配的内容,以便后续引用或进一步处理
(?<=\n):这是一个正向预查(positive lookbehind)构造,用于匹配在某个位置之前必须存在的内容。具体来说,(?<=\n)表示在当前位置之前必须满足存在换行符
(?=\n):这是一个正向预查(positive lookahead)构造,用于匹配在某个位置之后必须存在的内容。具体来说,(?=\n)表示在当前位置之后必须满足存在换行符 \n
扩展
(?P<分组名>)
(?p=分组名)
坚持分享 共同进步 如有错误 欢迎指出
标签:__,代表,管理器,Python,age,第二十一,正则,上下文 From: https://blog.csdn.net/weixin_45423893/article/details/144318401