zoukankan      html  css  js  c++  java
  • python---上下文管理器

    需求:

    想要在某些操作执行前后去完成某些固定操作

    from queue import Queue
    q = Queue()
    
    li = []
    
    
    li.append(1)  #在执行前想要做的操作
    q.get()  
    #在队列中获取值,想要在其前面和后面完成这些固定操作。若是一个具有重复性的工作,而且该操作复杂,那么我们最好将其注册为上下文管理器,可以使得代码简明 li.remove(
    1)  #在执行后想要做的操作

    举例:

    在我们使用with对文件进行操作的时候就是上下文管理

    with open("te.py","r",encoding="utf-8") as fp:  #将yield返回值使用as赋予给fp变量
        data = fp.read()
        print(data)

    这个上下文管理器,主要是在文件操作之后为我们加上了close方法,关闭了文件描述符

    使用:引入contextlib包,使用装饰器方法contextmanager去修饰自定义方法,就可以使用with方法去调用

    注意:其中使用到了生成器:

    from queue import Queue
    import contextlib
    
    q = Queue()
    
    
    @contextlib.contextmanager
    def worker_state(li,num):
        li.append(num)
        print(li)
        try:
            yield
        finally:
            li.remove(num)
            print(li)
    
    q.put("dsa")
    li = []
    
    with worker_state(li,1):
        q.get()

     自定义myopen方法打开文件:

    import contextlib
    
    
    @contextlib.contextmanager
    def myopen(file_path,mode):
        fp = open(file_path,mode,encoding="utf-8")  #先打开文件,获取文件描述符
        try:
            yield fp  #返回文件描述符
        finally:
            fp.close()  #执行完毕,关闭文件描述符
    
    with myopen("test.py",mode="r") as fp:  #调用自定义管理器,从yield获取文件描述符
        print(fp)
        data = fp.read()
        print(data)
  • 相关阅读:
    使用SQLite数据库实现登陆注册
    使用高德地图api(一)获取调试版和发布版SHA1,包名
    三个痛点简析与启蒙
    统计字符数,行数
    签到app需求分析
    三位数的四则运算
    蒸汽朋克与游戏的结合————《机械迷城》
    结对项目——My note(四)
    结对项目——My note(三)
    结对项目——My note(二)
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9029667.html
Copyright © 2011-2022 走看看