• 上下文与 with语句 (如打开文件open的巧妙写法)


    常规的打开文件读取

    try:

      f=open("/erer/123.txt")

      print f.read()

    finally:

      f.close()

    说明 : 无论打开文件和读取是否成功,都会去执行finally下面关闭连接释放资源的语句

    假如我们每次只连接不关,会占用资源

    使用with语句简写

    with后面的写法叫 上下文表达式

    with open("/erer/123.txt")  as  f:

      print f.read()

    说明: with是包含了上下文的封装,在with 模块下运行(在上文) 代码 建立连接,当代码跑出with的模块,会执行执行(下文) 关闭连接 释放资源

    注意:  假如在1/我这里报错,那么他就不会继续往下执行print f.read(),而是会执行执行(下文) 关闭连接 释放资源

    with open("/erer/123.txt")  as  f:

      1/我

      print f.read()

    #原理:

    class AAA:

      def __enter__(self):    上文函数

        return slef

      def __exit__(self, exc_type , exc_value , tb):   下文函数

        print  "下文函数,执行关闭连接释放资源"

      def test(self):

        print "执行查询"

    with AAA as f:     f不是等于AAA,他等于__enter__()上文的返回数据,上面我们返回self,就是AAA()自己

      f.test()   这里就变成self.test() 执行自己的函数

            执行完毕跳出with模块,接着执行下文函数__exit__() 退出连接释放资源,这个函数固定要接受4个变量的,当执行f.test() 出现异常 就会抛出异常数据4个,下文函数要接受4个异常变量,正常执行变量为None,当执行异常,还可以在__exit__()下文函数 学if判断 4个变量 分别是什么是啥来判断执行什么动作

    顺序: 先执行 上文函数,接着执行with里面的动作,最后执行下文函数

    try 和 except 用法也是类似的原理

  • 相关阅读:
    Cocoa中对日期和时间的处理 NSDate
    Fragment(一)--Fragment用法常见问题
    Volley源码解析(三) 有缓存机制的情况走缓存请求的源码分析
    # Volley源码解析(二) 没有缓存的情况下直接走网络请求源码分析#
    Android笔记--Bitmap(三) 针对不用Android版本的位图管理
    Java 语言中一个字符占几个字节?
    编码格式
    Volley解析(一)--Volley的使用
    Android笔记--Bitmap(二)内存管理
    Android笔记--Bitmap
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/12688998.html
Copyright © 2020-2023  润新知