zoukankan      html  css  js  c++  java
  • Python with语句

    参考链接:os-cn-pythonwith

    背景

    在tf的教程中看到有关的代码:

    会话在完成后必须关闭以释放资源。你也可以使用"with"句块开始一个会话,该会 话将在"with"句块结束时自动关闭

    with tf.Session() as sess:
        result = sess.run([product])
        print(result)
    

    概览:

    python中的with语句用于访问资源。它确保执行指定的__exit__(“清理”)操作,而不管释放被访问资源的处理过程中的错误或异常。
    例如读取和写入文件后自动关闭、线程中锁的自动获取和释放等。

    python中与语句相关的概念包括:上下文管理协议、上下文管理器、运行时上下文、上下文表达式和处理资源的代码段。

    with的作用:

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

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

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

    with只有在支持了上下文管理器的对象的情况下下才能使用。这些对象有:

    file
    decimal.Context
    thread.LockType
    threading.Lock
    threading.RLock
    threading.Condition
    threading.Semaphore
    threading.BoundedSemaphore
    

    那么什么是上下文管理器:
    这个管理器就是在对象内实现了两个方法:enter() 和__exit__()
     __enter__()方法会在with的代码块执行之前执行,exit()会在代码块执行结束后执行。
     __exit__()方法内会自带当前对象的清理方法。

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

    with 用法:

    格式:

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

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

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

    一个高级例子:

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

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

        with A() as X:
            with B() as Y:
                with C() as Z:
                     # with-body code here
    
  • 相关阅读:
    C#题型补充
    php数组
    PHP字符串
    动态网页制作PHP常用的正则表达式
    Objective-C:Foundation框架-常用类-NSArray
    Objective-C:Foundation框架-常用类-NSMutableString
    Objective-C:Foundation框架-常用类-NSString全解
    Objective-C:Block
    Objective-C:Category
    Objective-C:@property参数详解
  • 原文地址:https://www.cnblogs.com/schips/p/12149090.html
Copyright © 2011-2022 走看看