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来管理。

  • 相关阅读:
    返回图片宽高比
    3.1/3.2图片上传类
    php获取图片的拍摄及其他数据信息
    上传类
    pathinfo()的用法
    上传并压缩图片
    将数组转化为键值对
    css3判断某个li标签
    禁止滚动条/启用滚动条
    Keepalived + haproxy双机高可用方案
  • 原文地址:https://www.cnblogs.com/yanghh/p/13182917.html
Copyright © 2011-2022 走看看