html tool

2019年6月17日星期一

检索学习: with 上下文管理器


   参考地址 : https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/index.html


with 上下文管理器
   1. Context Management Protocol 包含
    __enter__() #[index] //执行顺序-with-body 之前
    __exit__()           //执行顺序-with-body 之后
   2. with context_epression [ as target(s) ]
     中的 as 为__enter__()中的return
     这里要求return     单个变量(eg: with open(f) as f_index ),
                    或者 (元祖对象),一定是() 中的内容

   3. contextlib模块 ,
        - 装饰器 @contextmanager
        eg:
        清单 9. 装饰器 contextmanager 使用示例

from contextlib import contextmanager

@contextmanager
def demo():
    print '[Allocate resources]'
    print 'Code before yield-statement executes in __enter__'
    yield '*** contextmanager demo ***'
    print 'Code after yield-statement executes in __exit__'
    print '[Free resources]'

with demo() as value:
    print 'Assigned Value: %s' % value
结果输出如下:

清单 10. contextmanager 使用示例执行结果
[Allocate resources]
Code before yield-statement executes in __enter__
Assigned Value: *** contextmanager demo ***     #生成器函数中 yield 之前的语句在 __enter__() 方法中执行,yield 之后的语句在 __exit__() 中执行,而 yield 产生的值赋给了 as 子句中的 value 变量
Code after yield-statement executes in __exit__
[Free resources]

没有评论:

发表评论