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
原文地址:http://beanxyz.blog.51cto.com/5570417/1870150