• with ...as ...


    这是一个相对比较好理解的用法. 

    有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。

    一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。

    with-as表达式极大的简化了每次写finally的工作.

    在对文件操作时候用的最多,  可以写成以下非常简洁的方式.  重要的是, 你不需要去考虑什么时候fclose的问题. 

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

    需要注意的是,  代码优雅的背后一定是已经做了些什么.  从这个例子中,  表面上看不出来的任何玄机, 但是在open文件的时候, 已经完成了类似enter和finally的工作. 

    实际中着两个函数是__enter__ ,  __exit__ .

    在实际的运行过程中,python会首先运行__enter__里的代码,返回self,作为as 后面的变量值,

    然后再运行with模块中的代码,最后会自动执行exit中的代码,而不管with中的代码运行结果如何。

    这也就是with能简化try-finally语句的原因。

    所以with通常用在读取文件的操作中,将文件句柄的关闭操作放在exit方法中,这样就不会因忘记释放文件句柄而产生可能出现的错误。

    另外,exit()方法的返回值可以用来指示with部分的代码出现的异常是否需要raise,如果返回false,则会raise,否则,不进行任何操作。

    还有一个需要注意的地方, 就是 with ... as ... : 之后的函数, 是属于的外围对象的, 和紧跟with的函数没有必然的关系.

    参考:

    http://blog.kissdata.com/2014/05/23/python-with.html

    http://effbot.org/zone/python-with-statement.htm

    http://www.cnblogs.com/Brogrammer/archive/2012/07/23/2605570.html

  • 相关阅读:
    django--orm---006
    django--orm---005
    django--orm---004
    django--orm---003
    jmeter连接数据库
    django--view---001
    django--orm---002
    django--model--orm001-- 增删改查
    java并发编程
    jvm
  • 原文地址:https://www.cnblogs.com/qingyuanjushi/p/5985551.html
Copyright © 2020-2023  润新知