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

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

    首先with的作用:  

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

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

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

    这些对象有:

    file
    decimal.Context
    thread.LockType
    threading.Lock
    threading.RLock
    threading.Condition
    threading.Semaphore
    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__()方法。

  • 相关阅读:
    flex 连接mysql
    正确配置调试world wind on vs2008
    FLex调用servlet连接数据库
    c# 连接mysql并webservice数据
    ADF连接SOM
    转载加收藏关于OPENGL配置VS2008
    flex不能显示本地发布的地图
    Symbian专区
    asp.net控件开发基础學習
    控制网页大小
  • 原文地址:https://www.cnblogs.com/lyfstorm/p/11063209.html
Copyright © 2011-2022 走看看