Comprender y utilizar el gestor de contexto Python

Comprender y utilizar el gestor de contexto Python

¿Cuál es el gestor de contexto?

  • Manager es un objeto de contexto envoltura bloque de código arbitrario.
  • El gestor de contexto garantizar el acceso a gestor de contexto, cada vez que el código de la consistencia de la ejecución.
  • Cuando salga del gestor de contexto, recursos relacionados se pueden reciclar correctamente.

Simplemente gestor de contexto de venta es with 语句

Los beneficios de utilizar un gestor de contexto

  • Puede ser en una forma más elegante, la operación (crear / / captar el comunicado de) los recursos, tales como operaciones de archivo, la conexión de base de datos;

  • Debe ser capaz de garantizar la aplicación de medidas de salida, con las declaraciones de la escritura de código, hacer el código más conciso, no se vaya a cerrar el archivo.

  • Puede ser de una manera más elegante de manejar excepciones.

Utilice el gestor de contexto

Para lograr su gestión de contexto tal, primero debe conocer el protocolo de gestión de contexto.

En pocas palabras, que pertenece a una clase, instancia de esta clase es un gestor de contexto.实现了 enter 和__exit__的方法

# 上下文管理协议
class Sample:
    def __enter__(self):
        print("enter")
        # 获取资源
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        # 释放资源
        print("exit")

    def do_something(self):
        print("doing something")


with Sample() as sample:
    sample.do_something()

salida:

enter
doing something
exit

Puede verse claramente en este ejemplo, al escribir código, o puede ser adquirida en los recursos de conexión __enter__, y el recurso se da de baja en el __exit__.

contextlib gestor de contexto simplificado

# 让普通函数也可以使用上下文管理, 前提条件是add函数必须是生成器函数,且只有yield语句
from contextlib import contextmanager


@contextmanager
def add(x, y):
    print('__enter__')  # 第一步:调用__enter__
    yield x + y  # 第二步:返回__enter__函数的返回值给obj对象
    print('__exit__')  # 第四步:调用__exit__


with add(1, 2) as obj:
    print(obj)  # 第三步:执行上下文语句块

salida:

__enter__
3
__exit__

  • contextlib Python módulo de la biblioteca estándar es proporcionar un módulo de gestión de contexto herramienta más fácil de usar;
  • Es ejecutado por el decorador, no es necesario crear una clase y el uso __enter__ y __exit__ estos dos métodos, es más conveniente que con la declaración;
  • @contextmanager es un decorador decorador, generador que recibe un generador, el generador en el rendimiento con el valor asignado a la variable ... como, y lleva a cabo con una frase normal;
  • después de cerrar @contextmanager también un decorador decorativo, cierre () puede convertirse en el objeto de contexto de objeto, a continuación, utilizar la sentencia with (a condición de que este objeto puede llamar método close ()!);

Referencia: gestor de contexto

Publicado 29 artículos originales · ganado elogios 19 · vistas 1310

Supongo que te gusta

Origin blog.csdn.net/s1156605343/article/details/104736418
Recomendado
Clasificación