zoukankan      html  css  js  c++  java
  • with-as 语句

    with-as语句又成为上下文管理协议,其结构如下:

    with expression [as variable]:
        with-block
    

    with 所求值的对象,即 expression 表达式所得到的对象必须有一个 __enter__() 方法和一个 __exit__() 方法。

    with-as语句执行流程:

    1)首先执行返回对象的 __enter__ 函数,它的返回值会赋给 as 后面的 variable 变量,如果不写as variable,返回值会被忽略。

    2)开始执行 with-block 中的语句。

    3)不论步骤2)执行成功还是失败,最后都会执行对象的__exit__函数。__exit__函数的返回值用来指示 with-block 部分发生的异

       常是否要 re-raise,如果返回 False,则会 re-raise with-block 的异常,如果返回 True,则就像什么都没发生。

    搞懂了 with 语句的执行流程,我们知道:为了让一个对象兼容 with 语句,我们需要实现 __enter__() 和 __exit__() 方法。

    接下来我们来自定义一个可以用 with 语句来管理的类型。

    class test(object):
        def __enter__(self):
            print("call __enter__")
            return 1
    
        def __exit__(self,*args):
            print("call __exit__")
            return True    # 改为False则会报出异常
    
    with test() as t:
        print("t is {0}".format(t))
        raise NameError("Hi there")
    

    with-as 语句常用于打开文件当中,因为文件对象也实现了__enter__和__exit__这两个函数,所以可以用with来管理。

  • 相关阅读:
    python 协程
    python 打印乘法表
    python 线程池
    python 队列
    开发react 应用最好用的脚手架 create-react-app
    React面试题
    修改了背景透明度
    低门槛彻底理解JavaScript中的深拷贝和浅拷贝
    Web Worker 使用教程
    Vue2 实现时空穿梭框功能模块
  • 原文地址:https://www.cnblogs.com/yanghh/p/13182917.html
Copyright © 2011-2022 走看看