-
Notifications
You must be signed in to change notification settings - Fork 0
/
Context_manager.py
36 lines (27 loc) · 1 KB
/
Context_manager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
'''
Los context managers son objetos de Python que proveen información contextual adicional al bloque de código.
Esta información consiste en correr una función (o cualquier callable) cuando se inicia el contexto con el
keyword with; al igual que correr otra función cuando el código dentro del bloque with concluye. Por ejemplo:
Existen dos formas de implementar un context manager:
con una clase o con un generador. Vamos a implementar la funcionalidad anterior para ilustrar el punto:'''
#class
class CustomOpen(object):
def __init__(self, filename):
self.file = open(filename)
def __enter__(self):
return self.file
def __exit__(self, ctx_type, ctx_value, ctx_traceback):
self.file.close()
with CustomOpen('file') as f:
contents = f.read()
#generator
from contextlib import contextmanager
@contextmanager
def custom_open(filename):
f = open(filename)
try:
yield f
finally:
f.close()
with custom_open('file') as f:
contents = f.read()