Python 学习笔记 - 上下文

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 学习笔记 - 上下文相关的知识,希望对你有一定的参考价值。

Python里面有个特殊的模块叫做上下文模块,可以和with搭配来实现一些功能。


他的执行方式是用户需要一个定义一个生成器的函数;with后面跟这个函数,他会执行yield之前的代码;然后跳出来,执行with语句下面的代码,然后再切换回函数,执行finally后面的代码。


比如

import contextlib
@contextlib.contextmanager
def worker_state(state_list, worker_thread):
    state_list.append(worker_thread)
    try:
        yield
    finally:
        state_list.remove(worker_thread)
        print(state_list)
        
free_list = []
current_thread = "alex"

with worker_state(free_list, current_thread):
    print(123)
    print(456)
    print(free_list)
----------
123
456
[‘alex‘]
[]


例2 如果with后面跟个as,我们可以通过yield传递一个对象到as上面,比如下面我就把一个列表对象传给了tt

import contextlib
import socket

@contextlib.contextmanager
def test(num):
    a=[]
    a.append(num)
    try:
        yield a
    finally:
        num+=100
        print(num)


with test(20) as tt:
    print(tt)
 ------------
[20]
120

本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1870150

以上是关于Python 学习笔记 - 上下文的主要内容,如果未能解决你的问题,请参考以下文章

python使用上下文对代码片段进行计时,非装饰器

python学习笔记012——pdb调试

Python 3学习笔记

Python学习笔记__12.8章 contextlib

python2.7高级编程 笔记一(Python中的with语句与上下文管理器学习总结)

python 3.x 学习笔记17(协程以及I/O模式)