我要学python之上下文管理

  

上下文管理

  

我们通常在写jdbc连接的时候都会写打开连接,使用连接,关闭连接。为了把资源合理利用,同时这些打开、关闭的工作是重复的工作,那么这些活能不能交给工具去做呢?答案肯定是可以的,不然怎么会有那么多的数据层中间件呢?我们要说的这个python的上下文管理也不是深新鲜概念,我们看下如下python代码:

  
 <代码>进口contextlib
  
  @contextlib.contextmanager
  def显示():
  print(“打开文件”)
  收益率
  打印(“文件”)
  
  与显示():
  打印(“开始写文件…”) 
  

输出结果:
打开文件
开始写文件…


关闭文件   

分析下上面的代码,我们不难看的出,这个就是我们说的,把一些简单频繁却很重要的工作交给工具去做的一个简单模型。我们再来看下面的代码:

  
 <代码>张开(指数。日志”、“w”) f:
  f。写(“开始写日志…”) 
  

通常我们写文件我们需要打开文件,写文件,关闭文件。那么这个过程就是跟我们jdbc类似。上面的代码就是通过内置函数开放打开文件,我们只要关心写文件,而打开文件,关闭文件都是交给上下文管理去做呢。我们可以看打开文档,如下:

  
 <代码> def打开(文件、模式=' r '缓冲=None,编码=没有错误=没有换行符=None, closefd=True): #特例的开放
  ”“”
  打开文件并返回一个流。提高IOError在那么失败。
  
  文件是一个文本或字节字符串(名称和路径
  如果文件不在当前工作目录)的文件
  或打开一个整数文件的文件描述符
  包装。(如果一个文件描述符,它是当关闭
  返回的I/O对象是关闭,除非closefd设置为False)。
  
  模式是一个可选的字符串指定的模式文件
  打开。它默认为“r”这意味着打开阅读的文本
  模式。其他常见的值是写作“w”(如果删除文件
  它已经存在),“x”创建和写入新文件,和
  附加的一个(在某些Unix系统,意味着所有写道
  附加到文件的末尾,无论当前寻求位置)。
  在文本模式下,如果没有指定编码的编码使用平台
  依赖:locale.getpreferredencoding(错误)的
  当前区域编码。(阅读和写作的原始字节使用二进制
  模式和编码未指明的离开。)可用的模式是:========================================================================角色的意义
  --------- ---------------------------------------------------------------
  “r”开放阅读(默认)
  ' w '开放写作,首先删除文件
  “x”创建一个新文件并打开它进行写作
  “a”开放写作,附加文件的末尾,如果它的存在
  “b”二元模式
  “t”文本模式(默认)
  “+”打开磁盘文件更新(阅读和写作)
  “U”普遍换行模式(弃用)========================================================================默认模式是“rt”(打开阅读文本)。二进制随机
  访问,“w + b”模式打开文件进行截断0字节,
  “r + b”打开文件没有截断。这意味着“w”和“x”模式
  提出了一个“FileExistsError”如果文件已经存在。
  
  Python区分文件打开二进制和文本模式,
  即使在底层操作系统没有。文件打开
  二进制模式(附加“b”的模式参数)返回内容
  没有任何解码字节对象。在文本模式(默认,或者当
  “t”是附加到模式参数),文件的内容
  作为字符串,返回的字节被第一次使用一个解码
  平台相关的编码或者使用指定的编码。
  
  “U”模式是弃用,并将在未来的版本中引发一个异常
  Python。它在Python 3没有影响。使用换行符来控制
  通用换行模式。
  
  缓冲是一个可选的整型用于设置缓冲政策。
  通过0关闭缓冲(只允许在二进制模式),1来选择
  行缓冲(仅在文本模式下可用),和一个整数比;1来表示
  一个固定大小的块大小的缓冲区。当没有缓冲参数
  ,默认缓冲策略工作如下:
  
  *二进制文件缓存在固定大小的块;缓冲区的大小
  选择使用启发式试图确定底层设备的吗
  “块大小”和“io.DEFAULT_BUFFER_SIZE”。
  在许多系统中,缓冲区通常是4096或8192字节。
  
  *“互动”的文本文件(文件isatty()返回True)
  使用行缓冲。其他文本文件使用上述政策
  二进制文件。
  
  编码的名称编码用来解码和编码
  文件。这应该只用于文本模式。默认的编码是
  平台的依赖,但任何Python支持的编码
  过去了。看到的编解码器模块支持的编码列表。
  
  错误是一个可选的字符串,指定如何编码错误
  处理- - -参数不应该用于二进制模式。通过
  “严格”提高ValueError异常是否有一个编码错误
  没有同样的效果(默认),或通过“忽略”,不容忽视
  错误。(注意,忽略编码错误可能导致数据丢失)。
  看到的文档编解码器。注册或运行“帮助(codecs.Codec)”
  为允许编码错误字符串的列表。
  
  换行符控制通用换行是如何工作的(它只适用于文本
  模式)。它可以没有,”、“\ n”‘\ r’,和‘\ r \ n’。它的工作原理是
  如下:
  
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

我要学python之上下文管理