• Python with语句


    直接把参考的文章放上面吧 :这个更专业,可以直接看这个。

    https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/

    之前在有些教程中看到了如下的的代码:

    1 with open("/tmp/foo.txt") as file:
    2     data = file.read()

    居然也可以这么写。具体是什么意思呢,with是怎么用的。

    废话不多说,以下是我自己的理解:

    首先with的作用:  

    使用with后不管with中的代码出现什么错误,都会进行对当前对象进行清理工作。

    例如file的file.close()方法,无论with中出现任何错误,都会执行file.close()方法

    其次with只有特定场合下才能使用。,这个特定场合只的是那些支持了上下文管理器的对象。

    这些对象有:

    1 file
    2 decimal.Context
    3 thread.LockType
    4 threading.Lock
    5 threading.RLock
    6 threading.Condition
    7 threading.Semaphore
    8 threading.BoundedSemaphore

    那么什么是上下文管理器:

      这个管理器就是在对象内实现了两个方法:__enter__() 和__exit__()

      __enter__()方法会在with的代码块执行之前执行,__exit__()会在代码块执行结束后执行。

      __exit__()方法内会自带当前对象的清理方法。

    with语句类似

      try :

      except:

      finally:

    的功能:但是with语句更简洁。而且更安全。代码量更少。

    with 用法:

    格式:

        with context_expression [as target(s)]:
            with-body

    例子:

        with open(r'somefileName') as somefile:
            for line in somefile:
                print line
                # ...more code

    with后面为一个表达式,表达式返回的是一个上下文管理器对象,我的理解就是表达式的返回结果。使用as 可以将这个结果赋值给某个变量。方便之后操作。

    一个感觉更牛掰的例子:

    nested 函数:

        with nested(A(), B(), C()) as (X, Y, Z):
             # with-body code here

    等同于:

        with A() as X:
            with B() as Y:
                with C() as Z:
                     # with-body code here

    直接with后面的表达式就是个方法。并且把连着三个函数的方法直接赋值给不同变量。

    上下文管理器可以自定义。也可以重写__enter__()和__exit__()方法。

  • 相关阅读:
    urllib3使用池管理发送请求和requests常用方法的基本使用+session使用
    Ajax爬取动态数据和HTTPS自动默认证书
    urllib库中的URL编码解码和GETPOST请求
    urllib的使用和进阶——urllib.request
    1.8学习进度总结
    1.7学习进度总结
    1.5学习进度总结
    1.4学习进度总结
    第十二周周进度总结
    第十一周周进度总结
  • 原文地址:https://www.cnblogs.com/zhangkaikai/p/6669750.html
Copyright © 2020-2023  润新知