• Python with语句


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

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

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

    with open("/tmp/foo.txt") as file:
         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()方法。

  • 相关阅读:
    memcached全面剖析--3.memcached的删除机制和发展方向
    memcached完全剖析--1. memcached的基础
    memcached全面剖析--2.理解memcached的内存存储
    memcached内存管理机制[未整理]
    memcached缓存基本概念
    有关memcached企业面试案例讲解
    网关协议学习:CGI、FastCGI、WSGI
    Redis和Memcached的区别
    Linux 日志切割工具cronolog详解
    vim粘贴代码格式变乱
  • 原文地址:https://www.cnblogs.com/tylf-lk/p/10133478.html
Copyright © 2020-2023  润新知