zoukankan      html  css  js  c++  java
  • with关键字

    1. 上下文管理器概念

    Context Manager指的是python在执行一段代码前后,做的一些预处理和后处理,使得代码块运行处于一个小的环境(surrounding),出了这个小环境之后,资源释放,环境中的各种配置也失效。

    例如在打开文件需要

    2. with关键字

    关闭,连接数据库后需要关闭连接。很多优雅第三方库也会利用上下文使得对象进入特定的某种状态。

    with的基本用法如下:

    with EXPR as VAR:
      BLOCK

    其中发生了一系列过程:

    1. EXPR语句被执行,得到ContextManager
    2. 调用ContextManager.__enter__方法
    3. 如果有as VAR,则ContextManager.__enter__的返回值赋给VAR,否则就不管返回值
    4. 执行BLOCK,如果有VAR被用到,就和普通变量一样
    5. 调用ContextManager.__exit__方法
      • __exit__有三个参数:type, value, traceback,BLOCK出异常时会得到对应值,正常情况就都为None
      • __exit__返回值为True表示BLOCK中出现的异常可以忽略,False表示需要raise

    使用contextlib简化编写

    python内置的标准库contextlib可以是的代码书写更加简洁,本质是一样的。比较有用的是contextlib.contextmanager这个装饰器,被装饰的函数在yield的前面相当于__enter__,yield的后面相当于__exit__,yield本身的返回值赋给as后的变量

    from contextlib import contextmanager
    
    @contextmanager
    def custom_open(filename: str):
        print("enter......")
        handler = open(filename)
    
        yield handler
    
        print("exit...")
        handler.close()
    
    
    with custom_open("hello.txt") as f:
        print(f.read())

    或者

    def test2():
        with open("1.txt", "w") as f:
            f.write("2222")
  • 相关阅读:
    Android Service组件在新进程绑定(bindService)过程
    第二章:创建框架和窗体
    ZOJ 2859 二维RMQ(模板)
    POJ 2828 Buy Tickets
    管理案例:怎样提高项目周例会的效率和效果?
    hdu4416 Good Article Good sentence (后缀数组)
    购买DigtalOcean VPS 安装Wordpress 攻略
    Asteroids!-裸的BFS
    hdu3015 Disharmony Trees
    iOS开发-自己定义后台显示图片(iOS7-Background Fetch的应用)
  • 原文地址:https://www.cnblogs.com/joy-field/p/14520005.html
Copyright © 2011-2022 走看看