标签:自己 exce get 语法 任务 例子 内容 错别字 运行
你肯定用过with open
的方法打开文件,然后进行读取写入等操作是吧:
with open(‘/tmp/a.txt‘, a) as file_obj:
file_obj.write("hello carson")
contextlib
就是实现这种功能的黑魔法。先说上面的文件操作流程:
用contextlib
实现呢,就是:
from contextlib import contextmanager
@contextmanager
def make_open_context(filename, mode):
fp = open(filename, mode)
try:
yield fp
finally:
fp.close()
with make_open_context(‘/tmp/a.txt‘, ‘a‘) as file_obj:
file_obj.write("hello carson666")
看到这个yield,如果你不懂的话,看链接吧:yield方法解释。如果不懂yield,后面的没法说了。
简单来说:把yield看作return,但是肯定是有区别的:
with make_open_context(‘/tmp/a.txt‘, ‘a‘) as file_obj:
,那么会让函数运行到yield fp
也就是return fp
,欸,就返回了是吧,返回的fp
给file_obj
了。file_obj.write("hello carson666")
,好,处理部分跑完了。finally: fp.close()
也就是说,yield
所对应的行会把函数分为两部分,第一部分在with make_open_context(‘/tmp/a.txt‘, ‘a‘) as file_obj:
中运行,然后返回的值给as
的对象file_obj
;接着运行处理的内容;完事了再运行后面的第二部分。
好了,直到这个流程了,我们可以做什么呢,做前面和后面是一样的,但是中间是不一样的事务,这样的任务。
你是不是懵了,没关系,看下面这个例子:
from contextlib import contextmanager
@contextmanager
def book_mark():
print(‘《‘, end="")
yield
print(‘》‘, end="")
with book_mark():
# 核心代码
print(‘且将生活一饮而尽‘, end="")
输出:《且将生活一饮而尽》
我的CSDN:https://blog.csdn.net/qq_21579045
我的博客园:https://www.cnblogs.com/lyjun/
我的Github:https://github.com/TinyHandsome
纸上得来终觉浅,绝知此事要躬行~
欢迎大家过来OB~
by 李英俊小朋友
标签:自己 exce get 语法 任务 例子 内容 错别字 运行
原文地址:https://www.cnblogs.com/lyjun/p/14185643.html