from contextlib import contextmanager

简化 With 语句:

class MyResource:
    def query(self):
        print("query data")

# 简化 With 语句, 不在自定义 __enter__ __exit__ 方法
from contextlib import contextmanager

@contextmanager
def make_myresource():
    print("进入上下文管理器")
    yield MyResource()
    print("退出上下文管理器")


# yield 生成器
with make_myresource() as r:
    r.query()

灵活使用@contextmanager:


from contextlib import contextmanager
#  @contextmanager 该装饰器的作用: 简化 上下文语句, 不用定义 __enter__, __exit__ 方法, 也可以实现上下文的作用
@contextmanager
def book_mark():
    print("<", end='')
    # yield 生成器, 将上下文的主体返回
    yield
    print(">", end='')

# 打开 book_mark() 该上下文
with book_mark():
    print("且将生活, 一饮而尽", end='')

该代码的意义是: 在某个事件, 或者某段代码执行前与执行后, 分别执行什么

contextmanager 的基本使用的更多相关文章

  1. Python标准模块--ContextManager

    1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...

  2. Python.with.context-manager

    Context Manager 1. Context Manager简介 "Context managers are a way of allocating and releasing so ...

  3. With语句以及@contextmanager的语法解析

    with 语句以及@contextmanager的语法解析   with语句可以通过很简单的方式来替try/finally语句. with语句中EXPR部分必须是一个包含__enter__()和__e ...

  4. 使用@contextmanager装饰器实现上下文管理器

    通常来说,实现上下文管理器,需要编写一个带有__enter__和 __exit__的类,类似这样: class ListTransaction: def __init__(self, orig_lis ...

  5. @contextmanager

    with的作用,类似try...finally...,提供一种上下文机制. 要应用with语句的类,其内部必须提供两个内置函数__enter__以及__exit__ ,   前者在主体代码执行前执行, ...

  6. 理解contextmanager

    同事在查看网络问题导致虚拟机状态一直pause时,在一段代码(见以下)处产生了疑惑.问我,我也是一头雾水.后同事找到参考文章(1),算是了解了个大概.而我对contextmanager的工作产生了兴趣 ...

  7. Python contextlib.contextmanager

    看着代码又发现了一个奇怪的东西: @contextlib.contextmanager def __call__(self, incoming): result_wrapper = [] yield ...

  8. python 上下文管理器contextlib.ContextManager

    1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...

  9. 源码剖析@contextlib.contextmanager

    示例 @contextlib.contextmanager def result(a): print('before') yield print('after') 外层装饰源码 包装func函数,真实 ...

随机推荐

  1. CSS中的样式层叠机制Cascade

    CSS中的样式层叠机制Cascade 一.样式冲突   样式冲突是CSS渲染过程要解决的一个关键问题,样式冲突主要由两个原因造成: 元素包含了不同对象所赋予的样式:浏览器.用户.作者.其中,浏览器样式 ...

  2. 增加ssh无密码信任连接的安全性

    为了方便系统管理或者服务器运维自动化,我们通常要在服务器间做ssh无密码信任连接. 环境:目标主机    centos7    192.168.150.110操作主机    centos7-cn 19 ...

  3. Android 监听APP进入后台或切换到前台方案对比

    在我们开发的过程中,经常会遇到需要我们判断app进入后台,或者切换到前台的情况.比如我们想判断app切换到前台时,显示一个解锁界面,要求用户输入解锁密码才能继续进行操作:我们想判断app切换到后台,记 ...

  4. adb使用wifi无线连接调试Android设备

    先上官方原文: Wireless usage adb is usually used over USB. However, it is also possible to use over Wi-Fi, ...

  5. Azure 进阶攻略 | 上云后的系统,「门禁」制度又该如何实现?

    各位办公室白领们,不妨回想一下自己每天去公司上班时的一些细节. 为避免「闲杂人等」进入工作场所,我们需要证明自己是这家公司的员工才能进入,对吧!所有员工,无论所属部门或职位,都必须先证明自己身份,例如 ...

  6. .net 控制器调用外部链接传参方法

    public class RequestHelper { /// <summary> /// 发起post请求 /// </summary> /// <typeparam ...

  7. 关于VisualStudio2010发布项目问题

    VisualStudio2010速度还是很给力的,VS2015打开机器就双100%了:VS2010机器上跑起来还是很好用的. 今天编译一个MVC3.0项目,发布时候出现诡异现象:Content文件夹里 ...

  8. CentOS6.9上安装FreeSWITCH1.6.19

    安装环境:操作系统:[zhi@Freeswitch ~]$ cat /etc/redhat-release CentOS release 6.9 (Final)[zhi@Freeswitch ~]$ ...

  9. Linux 使用第三方邮箱发邮件的设置

    mail命令在Ubuntu下是需要安装的,使用下条命令进行安装: sudo apt-get install heirloom-mailx 在CentOS 下安装则是: yum install mail ...

  10. SAP Fiori里的List是如何做到懒加载Lazy load的

    今天一同事问我这个问题:S/4HANA Fiori应用里的列表,一旦Scroll到底部就会自动向后台发起新的请求把更多的数据读取到前台显示. 以Product Master这个应用为例,我点击搜索之后 ...