Python 学习笔记 - 上下文

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

 

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

 

比如

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

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

转载于:https://my.oschina.net/learnbo/blog/878691

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值