B谩sicos del Lenguaje

1

Gu铆a de instalaci贸n y conceptos b谩sicos

2

Archivos y slides del curso pr谩ctico de Python

3

IMPORTANTE: Instalando Ubuntu Bash en Windows para facilitarte el seguimiento del curso desde Windows.

4

驴Qu茅 es la programaci贸n?

5

驴Por qu茅 programar con Python?

6

Operadores matem谩ticos

7

Variables y expresiones

8

Presentaci贸n del proyecto

9

Funciones

10

Usando funciones en nuestro proyecto

11

Operadores l贸gicos

12

Estructuras condicionales

Uso de strings y ciclos

13

Strings en Python

14

Operaciones con Strings en Python

15

Operaciones con strings y el comando Update

16

Operaciones con strings y el comando Delete

17

Operaciones con strings: Slices en python

18

For loops

19

While loops

20

Iterators and generators

Estructuras de Datos

21

Uso de listas

22

Operaciones con listas

23

Agregando listas a nuestro proyecto

24

Diccionarios

25

Agregando diccionarios a nuestro proyecto

26

Tuplas y conjuntos

27

Tuplas y conjuntos en c贸digo

28

Introducci贸n al m贸dulo collections

29

Python comprehensions

30

B煤squedas binarias

31

Continuando con las B煤squedas Binarias

32

Manipulaci贸n de archivos en Python 3

Uso de objetos y m贸dulos

33

Decoradores

34

Decoradores en Python

35

驴Qu茅 es la programaci贸n orientada a objetos?

36

Programaci贸n orientada a objetos en Python

37

Scopes and namespaces

38

Introducci贸n a Click

39

Definici贸n a la API p煤blica

40

Clients

41

Servicios: L贸gica de negocio de nuestra aplicaci贸n

42

Interface de create: Comunicaci贸n entre servicios y el cliente

43

Actualizaci贸n de cliente

44

Interface de actualizaci贸n

45

Manejo de errores y jerarqu铆a de errores en Python

46

Context managers

Python en el mundo real

47

Aplicaciones de Python en el mundo real

Conclusiones finales

48

Python 2 vs 3 (Conclusiones)

Clases bonus

49

Entorno Virtual en Python y su importancia: Python en el mundo real

Context managers

46/49

Lectura

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:

...

Reg铆strate o inicia sesi贸n para leer el resto del contenido.

Aportes 23

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Otro gran ejemplo de context managers (sin caer en el razonamiento circular usando 鈥渙pen鈥 para crean un 鈥渃ustom_open鈥)
es el verlo como una implementacion de tareas de shell, pero en python (imaginate escribiendo el 鈥setup.py鈥 de un server linux)

Han notado como es muy sencillo escribir en shell:

cd /path/to/project
coolShellCommand -xyz
cd -

Pero en python se necesita implementar algo como esto:

cwd = os.getcwd()

try:
	os.chdir('path/to/project')
	os.system('coolShellCommand -xyz')
finally:
	os.chdir(cwd)

Lo cual se ve bastente feo y desordenado, seria genial escribir algo como:

with os.chdir('path/to/project/'):
	os.system('coolShellCommand -xyz')

Pero no existe, asi que creemoslo nosotros:

class cdContextMgr(ob颅jec颅t):
    def __init__(颅self, new_dir):
        self颅.new_dir = new_dir
        self颅.old_dir = None

    def __enter__(颅self):
        self颅.old_dir = os颅.getcwd()
        os颅.chdir(颅self.new_dir)

    def __exit__(颅self, *_):
        os颅.chdir(颅self.old_dir)

y asi podemos utilizar:

with cdContextMgr('/path/to/project')
	os.system('coolShellCommand -xyz')

Esto hace lo mismo que al principio, nos evitamos duplicar codigo y aprendemos sobre conext managers

Les dejo un enlace donde se explica muy bien
http://book.pythontips.com/en/latest/context_managers.html

Python esta lleno de trucos que casi parecen m谩gia.

Hola estimado David (@jdaroesti), me encanta la forma en la que explicas y ense帽as, desde el curso pasado soy tu fan.
Sin embargo encontr茅 en el presente art铆culo algo que podr铆a mejorar:

En el primer ejemplo sobre el uso de with pegaste with con open, lo que ocasionar谩 en la pr谩ctica un error de sintaxis.

withopen(鈥榮ome_file.txt鈥) as f:
    lines = f.readlines()

Siento que fue un error de dedo, pero que podr铆a confundir a las personas que comienzan con el lenguaje.

La forma correcta del primer ejemplo ser铆a:

with open(鈥榮ome_file.txt鈥) as f:
    lines = f.readlines()

El mismo detalle ocurre en el ejemplo siguiente en la l铆nea:

classCustomOpen(object):def__init__(self, filename):

Lo correcto ser铆a:

class CustomOpen(object):def__init__(self, filename):

Ojal谩 no me vea muy chocoso con 茅ste comentario, pero siento que tu calidad como profesional de python, es muy alta y 茅ste peque帽o error podr铆a quitar coherencia a tu imagen.

Excelente curso, ojal谩 fueras mentor de otros cursos de programaci贸n como javascript.

Saludos.

creo que comprendi, tengo que practicarlo mas

me gust贸 mucho esta informaci贸n鈥 de hecho siento que por fin voy entendiendo como funciona el lenguaje por dentro鈥 animo a todos a seguir aprendiendo 馃槃

from contextlib import contextmanager

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()


def read_file(filename):
	with CustomOpen(filename) as f:
		contents = f.read()
	return contents


@contextmanager
def custom_open(filename):
	f = open(filename)
	try:
		yield f
	finally:
		f.close()


if __name__ == '__main__':
	## custom = CustomOpen('operaciones_con_listas.py')
	custom_open('operaciones_con_listas.py')
	print(read_file('operaciones_con_listas.py'))
	print('-'*30)
	```

En palabras para mortales, los contextos son una funci贸n decoradora que ayuda a ejecutar c贸digo antes y despu茅s de c贸digo que les pasemos.

Esta clase me vol贸 la cabeza. Ahora entiendo c贸mo funciona el with perfectamente.

En otras palabras, el protocolo de gestor de contextos definidos en el PEP 343 permite la extracci贸n de la parte aburrida de la estructura try鈥xcept鈥inally en una clase separada manteniendo solo el bloque de inter茅s do_something.

Primero se llama al m茅todo enter. Puede devolver un valor que ser谩 asignado a var. La parte as es opcional: si no est谩 presente, el valor devuelto por enter ser谩 ignorado.
El bloque de c贸digo bajo with se ejecutar谩. Como si fueran condiciones try. Se podr谩 ejecutar con 茅xito hasta el final o, si algo falla, puede break, continue` o return o lanzar una excepci贸n. Pase lo que pase, una vez que el bloque ha finalizado, se producir谩 una llamada al m茅todo exit. Si se lanz贸 una excepci贸n, la informaci贸n se manda a exit, el cual se describe en la siguiente subsecci贸n. En el caso normal, las excepciones podr铆an ser ignoradas como si fueran una condici贸n finally y ser铆an relanzadas despu茅s de que finalice exit.

Excelente ejemplo

Excelente info

Me recuerda a la sentencia using de c#
https://www.youtube.com/watch?v=uiQmHQftO9E

Comparto video que explica este tema muy bien. Me sigue preocupando que para algunos temas tan claves y algo avanzados, solo coloquen un texto.

https://www.youtube.com/watch?v=J5paZNIqqHI&ab_channel=nicosiored

Las 2 ultimas clases del m贸dulo muy vagas en informaci贸n pero son conceptos de python muy interesantes y geniales. Gracias a la comunidad por los recursos adicionales 馃

sigamos aprendiendo

Genial, excelente informaci贸n.

Los m茅todos init, enter y exit los entend铆 como los React lifecycles jajaa

se explica en alg煤n momento de este curso o del curso de python el uso de yield?

En que otros ambitos o casos podemos usar el context manager

Excelente lectura realmente la entendi a la perfeccion.