文章目录
1. rpartition
作用:从目标字符串的末尾也就是右边开始搜索分割符,将输入的字符分割成3部分
str = "www.baidu.bbbbccom"
output = str.rpartition("b")
print(f"output={output}")
output=('www.baidu.bbb', 'b', 'ccom')
2. contextmanager
定义:实现了上下文协议的对象即为上下文管理器。作用是可以比较精准的分配和释放资源
上下文协议:含有两个函数:
__enter__
__exit__
2.1 自定义上下文管理器类
- 代码
# 自定义一个上下文管理器类
class MyResource:
# __enter__函数(必备)
# __enter__ 返回的对象会被with语句中as后的变量接受
def __enter__(self):
print('connect to resource!')
return self
# __exit__函数(必备)
def __exit__(self, exc_type, exc_val, exc_tb):
print('close the resource!')
# 自定义query函数
def query(self):
print('query data')
with MyResource() as r:
r.query()
- 结果
connect to resource!
query data
close the resource!
2.2 contextmanager修饰符
python 为了更简单的解决上述问题,使用了contextmanager
修饰符进行处理,使得代码更佳简洁
- 代码
# 调用 contextlib 库,方便调用上下文管理器
from contextlib import contextmanager
class MyResource:
def query(self):
print("query the data")
@contextmanager
def make_resource():
# with 语句中的代码块执行前执行函数中yield之前代码
# 相当于 __enter__ 部分
print("start to the connect")
# yield 返回的内容复制给as之后的变量
yield MyResource()
# with代码块执行完毕后执行函数中yield之后的代码
# 相当于 __exit__ 部分
print("end to the connect ")
pass
with make_resource() as r:
r.query()
- 结果
start to the connect
query the data
end to the connect