Introducci贸n

1

El Zen de Python

Conjuntos

2

Sets

3

Modificando conjuntos

4

Operaciones con conjuntos

5

Playgrounds: Elimina elementos duplicados usando conjuntos

Comprehensions

6

List Comprehension

7

Dictionary Comprehension

8

Dictionary Comprehension: condition

9

Playgrounds: Crea una lista usando List Comprehension

10

Lists vs. Tuples vs. Sets

Funciones

11

Funciones

12

Funciones: return

13

Par谩metros por defecto y m煤ltiples returns

14

El scope

15

Refactor game

16

Playgrounds: Tienda de Tecnolog铆a

17

Funciones an贸nimas: lambda

18

Higher order function: una funci贸n dentro de otra funci贸n

19

Map

20

Map con diccionarios

21

Reto: map con inmutabilidad

22

Playgrounds: Multiplica todos los elementos por dos

23

Filter

24

Playgrounds: Retorna solo palabras de 4 letras y m谩s

25

Reduce

M贸dulos

26

M贸dulos

27

Mis propios m贸dulos

28

M贸dulos como scripts: __name__ y __main__

29

Paquetes

30

Playgrounds: Calcular la suma de todas las compras

Manipulaci贸n de archivos y errores

31

Iterables

32

Errores en Python

33

Manejo de excepciones

34

Playgrounds: Captura la excepci贸n: ZeroDivisionError

35

Leer un archivo de texto

36

Escribir en un archivo

37

Leer un CSV

38

Playgrounds: Lee un CSV para calcular el total de gastos

Gr谩ficas en Python

39

Creando una gr谩fica

40

Reto: graficando la poblaci贸n de un pa铆s

41

Reto: graficando la poblaci贸n mundial

Pr贸ximos pasos

42

隆Conoce otros proyectos de este curso!

43

Reconoce tu proceso y certif铆cate

44

Toma el Curso de PIP y Entornos Virtuales con Python

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Paquetes

29/44
Recursos

Aportes 49

Preguntas 13

Ordenar por:

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

o inicia sesi贸n.

Podemos importar todo un m贸dulo de un paquete y nombr谩ndolo con la palabara clave as

# mod_2.py
import package.mod_2 as mod_2

print(mod_2.func_3())
print(mod_2.func_4())

.
Tambi茅n podemos usar los paquetes desntro de un m贸dulo que est谩 en el mismo paquete

# mod_3.py
from .mod_1 import func_1
from . import mod_2

def func_5():
    return func_1()

def func_6():
    return mod_2.func_3()

.
Este 煤ltimo es muy com煤n usarlo en framework como django, flask entre otros.

PAQUETES
Los paquetes son las carpetas que contienen varios m贸dulos y cada uno con una funci贸n distinta.

Para ello debe tener siempre un archivo de nombre __init__.py (por lo general esta vacio, ya que as铆 es compatible con programas python versiones anteriores a la 3), con esto le estamos indicado a python que esto se trata de un paquete y no de una carpeta.

Para acceder a los m贸dulos de los paquetes podemos utilizar estas opciones:
import nombrecarpeta.nombremodulo
from nombrecarpeta import nombremodulo
from nombrecarpeta.nombremodulo import def

Estos son algunos ejemplos:

Antes de realizar el ejemplo debemos tener nuestra carpeta definida con la siguiente estructura:

En nuestra carpeta pkg, creamos dos archivos: __init__.py y aritmetica.py

__init__.py Se utiliza cuando debemos utilizar paquetes en versiones anteriores a python 3 o puede contener informaci贸n la cual se ejecutara siempre, para este caso le colocamos el titulo Bienvenido a la clase de Aritmetica.

aritmetica.py va a contener nuestras operaciones aritmeticas que son, suma, resta, multiplicacion y division:

def sumar(a, b):
    return a + b

def restar(a, b):
    return a - b

def mult(a, b):
    return a * b

def div(a, b):
    return a / b

Ahora en nuestro archivo principal main.py ejecutaremos los paquetes de la siguiente manera:

import nombrecarpeta.nombremodulo

import pkg.aritmetica
print(pkg.aritmetica.sumar(5,7))
print(pkg.aritmetica.restar(5,7))

Produccion:

Bienvenido a la clase de Aritm茅tica
12
-2

from nombrecarpeta import nombremodulo

from pkg import aritmetica 
print(aritmetica.sumar(5,7))
print(aritmetica.restar(5,7))

Produccion:

Bienvenido a la clase de Aritm茅tica
12
-2

from nombrecarpeta.nombremodulo import def

from pkg.aritmetica import sumar
print(sumar(5,7))
from pkg.aritmetica import restar
print(restar(5,7))

Produccion:

Bienvenido a la clase de Aritm茅tica
12
-2

Esta clase fue muy reveladora, por fin entend铆 para que se utiliza el init.py

Un paquete en Python es una carpeta que contiene varios m贸dulos.

Para importar paquetes m贸dulos en su interior tenemos diversos m贸dulos, entre los que se pueden listar:

  • import packageName
  • import packageName.moduleName
  • from packageName import moduleName
  • from packageName.moduleName import functionName

Ahora bien, Python maneja los paquetes de 2 formas diferentes:

  • Versi贸n 3.2 y anteriores

    Los paquetes para estas versiones requieren el archivo __init__.py, este es un archivo especial empleado para indicar que el directorio debe ser tratado como un paquete. Usualmente este archivo est谩 vac铆o, pero puede ser usado para configurar el paquete y definir la variable __all__ (precisa que variables son importadas cuando el m贸dulo lo hace, el resto de variables arrojar谩n un error - fuente -).

    Como se ha mencionado, el archivo __init__.py no necesita contenido puesto que solo se usa para inicializar el paquete cuando se importa.

  • Versi贸n 3.3 y superiores

    Los paquetes de las versiones m谩s recientes no requieren el archivo __init__.py debido al m贸dulo importlib, el cual es el n煤cleo de todo en sistema de importaci贸n; gracias al mismo los paquetes se identifican ahora autom谩ticamente. Sin embargo, el archivo __init__.py ofrece diversas funcionalidades por las que se puede seguir usando, entre ellas:

    • Configurar el paquete cuando se importa, por ejemplo, al definir variables o realizar ciertas tareas de inicializaci贸n.
    • Definir la variable __all__ ya mencionada.
    • Definir sub-m贸dulos y sub-paquetes.
    • Definir el API del paquete, que es el conjunto de funciones, clases y s铆mbolos que se orientan al uso p煤blico.
    • Habilitar un namespace.

Namespace

Un namespace es un sistema que tiene un nombre 煤nico para cada objeto en Python.

Es posible habilitar un namespace a trav茅s del archivo __init__.py si los m贸dulos de dicho paquete se importan en el mismo:

  • Archivo __init__.py
import pkg.mod_1
  • Archivo mod_1.py
def func_1():
  return 'func 1'
  
def func_2():
  return 'func 2'
  • Respuesta sin __init__.py
import pkg

print(pkg.mod_1.func_1()) # AttributeError: module 'pkg' has no attribute 'mod_1'
  • Respuesta con __init__.py
import pkg

print(pkg.mod_1.func_1()) # func 1

As铆 pues, la funci贸n importada posee un nombre 煤nico a partir de su paquete.

馃挕 M谩s informaci贸n puede ser hallada aqu铆:

Muy bueno ver esos ejemplos con desarrollos mas profesionales para ir evaluando hasta donde se puede llegar.

驴Qui茅n m谩s quiere un curso de POO en Python? 馃檶

鈥淧arte del c贸digo que usaras en tu vida profesional鈥 :鈥) gracias, Nicolas, me motivas.

Les recomiendo seguir a Sebasti谩n Ram铆rez en sus redes sociales, 隆vale la pena leer lo que escribe!

Excelente, no conoc铆a la segunda forma!

Excelente que hayan tenido en cuenta explicar que son los paquetes, en los cursos anteriores no lo hac铆an.

pkg/mod_1

def func_1():
  return "func 1"

def func_2():
  return "func 2"

pkg/mod_2

def func_3():
  return "func 3"

def func_4():
  return "func 4"

pkg/init

# Paquetes
# https://github.com/tiangolo
# https://github.com/tiangolo/full-stack-fastapi-postgresql

'''
Antes de la version 3.3 de Python, este archivo se usaba para declarar los paquetes.
De la 3.3 en adelante se usa solo para inicializar alguna variable o importaciones a paquetes.
'''

print("Se inicio paquete")

# Cada vez que llame el paquete, inmediatamente se va a crear e inicializar esta variable
URL = "platzi.com"

'''
Este archivo tambien puede ser usado para definir un namespace
'''

import pkg.mod_1, pkg.mod_2

main

# El Zen de Python
# import this

'''
from pkg.mod_1 import func_1, func_2
from pkg.mod_2 import func_3, func_4

print(func_1())
print(func_2())
print(func_3())
print(func_4())
'''

import pkg
print(pkg.URL)
print(pkg.mod_1.func_1())

Packages en Python

  • Los paquetes son una forma de organizar m贸dulos relacionados.
  • Un paquete es simplemente un directorio que contiene un archivo especial llamado i n i t . p y (o init) y otros m贸dulos y subpaquetes relacionados.
  • Para trabajar con un paquete en Python, se puede importar un m贸dulo espec铆fico dentro del paquete usando la sintaxis import p a c k a g e . m o d u l e.
  • Se puede importar todo el paquete usando la sintaxis import package.
  • Se puede usar el c贸digo en los m贸dulos importados para realizar tareas espec铆ficas en el proyecto.

Excelente curso y clase 馃ぉ aprendido mucho que bueno. Y Hasta nos ense帽a un perfil pro y su trabajo genial.

En Python, los paquetes son una forma de organizar y estructurar nuestro c贸digo en m贸dulos relacionados. Un paquete es simplemente una carpeta que contiene uno o m谩s m贸dulos de Python y un archivo especial llamado 鈥渋nit鈥 Este archivo le dice a Python que la carpeta es un paquete y puede contener otros paquetes y m贸dulos.

Los paquetes nos permiten dividir nuestro c贸digo en piezas m谩s peque帽as y manejables, lo que hace que sea m谩s f谩cil de mantener y compartir con otros desarrolladores. Por ejemplo, si est谩s trabajando en un proyecto de an谩lisis de datos, puedes tener un paquete para cargar y limpiar datos, otro para realizar an谩lisis estad铆sticos y otro para visualizar los resultados.

Siempre hab铆a puesto el init.py pero no sabia de las versiones.

Inicializar variables en un paquete con el archivo init

  1. Creamos el archivo init en la carpeta del paquete
  1. Agregamos definiciones de prueba en el archivo init
#__init__.py
print('Se inicio paquete')
URL = 'platzi.com'
  1. Al correr el archivo main, el sistema busca primero el archivo init y corre lo que esta dentro, luego corre los que esta en el archivo main
>>> python main.py
--> Se inicio paquete
		func 1
		func 2
		func 3
		func 4
  1. Podemos utilizar alguna variable de init en main al importar todo el paquete
# main.py
from pkg.mod_01 import func_1, func_2
from pkg.mod_02 import func_3, func_4

print(func_1())
print(func_2())
print(func_3())
print(func_4())

import pkg
print(pkg.URL)
>>> python main.py
--> Se inicio paquete
		func 1
		func 2
		func 3
		func 4
		platzi.com

Inicializar importaciones con el archivo init

El archivo init tambien sirve para definir los espacios de nombre de manera que pueda utilizarse en el archivo main de forma reducida.

  1. Al llamar una funcion desde su modulo y paquete como sigue, se genera un error debido a que no se esta haciendo una importacion explicita de los modulos
# main.py
import pkg

# llamado de una funcion desde el modulo y el paquete
print(pkg.mod_01.func_2())
--> ERROR
  1. para solucionarlo, debemos inicializar la importacion de los modulos en el archivo init como sigue
# __init__.py
print('Se inicio paquete')
URL = 'platzi.com'
import pkg.mod_01, pkg.mod_02
  1. De esta manera, el archivo main podra ejecutarse sin errores utilizando los name space
# main.py
import pkg

# llamado de una funcion desde el modulo y el paquete
print(pkg.mod_01.func_2())
--> Se inicio paquete
		func 2
Podr铆an actualizar los enlaces de los recursos, ya no aparece la carpeta Cookiecutter.

Creo q muchos aqu铆 a estas alturas estamos usando una versi贸n de Python bastante actualizada en replit y a煤n as铆 no nos importaba el paquete hasta q creamos el archivo init.py

Me gusto esta clase con respecto a los paquetes. Aprendi mucho con respecto al uso de estos y como nos puede ayudar a ser mejores.

Soluci贸n al error en replit:

>  python3 main.py
  Traceback (most recent call last):
  File "/home/runner/Python-102/main.py", 
  line 13, in <module> print(pkg.URL)
   AttributeError: module 'pkg' has no attribute 'URL'
  exit status 1
.

es porque la version de python es inferior:
Files pyproject.toml version.
.

.

.

soluci贸n: crear el archivo 鈥init.py鈥 en el directorioo pkg

![](https://static.platzi.com/media/user_upload/Screen%20Shot%202023-10-13%20at%2011.54.32%20AM-45f9e986-b7a9-43ca-a1ae-a13d95e7ca53.jpg)No entiendo si estoy corriendo la 3.11 - En teoria el codigo deberia ser capaz de llamar a la variable global que declare en **init**, ayuda para entender esto

En Python, un paquete es una forma de organizar y estructurar m煤ltiples m贸dulos relacionados en un directorio jer谩rquico. Los paquetes son 煤tiles cuando tienes un conjunto de m贸dulos que est谩n relacionados entre s铆 y deseas mantenerlos organizados de manera l贸gica en tu proyecto. Aqu铆 hay algunas caracter铆sticas clave de los paquetes en Python:

  1. Directorio Especial: Para crear un paquete, debes crear un directorio especial en tu proyecto. Este directorio debe contener un archivo especial llamado __init__.py. Este archivo puede estar vac铆o, pero es necesario para que Python reconozca el directorio como un paquete.

  2. Estructura Jer谩rquica: Los paquetes pueden contener subpaquetes y m贸dulos relacionados en una estructura jer谩rquica. Esto te permite organizar tu c贸digo de manera m谩s l贸gica. Por ejemplo, puedes tener un paquete llamado utilidades que contenga subpaquetes como matematicas y cadena, cada uno con sus propios m贸dulos.

  3. Importaci贸n de Paquetes: Puedes importar m贸dulos de un paquete utilizando la notaci贸n de punto. Por ejemplo, si tienes un paquete llamado utilidades con un m贸dulo llamado matematicas, puedes importarlo de la siguiente manera:

    pythonCopy code
    from utilidades import matematicas
    
    
  4. Alias de Paquetes: Puedes asignar alias a los paquetes para hacer m谩s corta la notaci贸n de punto al importar. Por ejemplo:

    pythonCopy code
    import utilidades.matematicas as math
    
    
  5. __init__.py: El archivo __init__.py puede contener c贸digo de inicializaci贸n para el paquete. Este c贸digo se ejecutar谩 cuando se importe el paquete. Esto es 煤til para realizar configuraciones iniciales o definir variables globales para el paquete.

  6. Utilidad para Proyectos Grandes: Los paquetes son especialmente 煤tiles en proyectos grandes y complejos, ya que ayudan a mantener el c贸digo organizado y modular. Tambi茅n facilitan la reutilizaci贸n de c贸digo, ya que puedes importar f谩cilmente m贸dulos desde otros paquetes en tu proyecto.

  7. Ejemplo: Aqu铆 hay una estructura de paquetes de ejemplo:

    markdownCopy code
    proyecto/
    鈹溾攢鈹 __init__.py
    鈹溾攢鈹 main.py
    鈹溾攢鈹 utilidades/
    鈹   鈹溾攢鈹 __init__.py
    鈹   鈹溾攢鈹 matematicas.py
    鈹   鈹斺攢鈹 cadena.py
    鈹斺攢鈹 datos/
        鈹溾攢鈹 __init__.py
        鈹溾攢鈹 cargar.py
        鈹斺攢鈹 guardar.py
    
    

En Python, un paquete es una forma de organizar y estructurar m煤ltiples m贸dulos relacionados en un directorio jer谩rquico. Los paquetes son 煤tiles cuando tienes un conjunto de m贸dulos que est谩n relacionados entre s铆 y deseas mantenerlos organizados de manera l贸gica en tu proyecto. Aqu铆 hay algunas caracter铆sticas clave de los paquetes en Python:

  1. Directorio Especial: Para crear un paquete, debes crear un directorio especial en tu proyecto. Este directorio debe contener un archivo especial llamado __init__.py. Este archivo puede estar vac铆o, pero es necesario para que Python reconozca el directorio como un paquete.

  2. Estructura Jer谩rquica: Los paquetes pueden contener subpaquetes y m贸dulos relacionados en una estructura jer谩rquica. Esto te permite organizar tu c贸digo de manera m谩s l贸gica. Por ejemplo, puedes tener un paquete llamado utilidades que contenga subpaquetes como matematicas y cadena, cada uno con sus propios m贸dulos.

  3. Importaci贸n de Paquetes: Puedes importar m贸dulos de un paquete utilizando la notaci贸n de punto. Por ejemplo, si tienes un paquete llamado utilidades con un m贸dulo llamado matematicas, puedes importarlo de la siguiente manera:

    pythonCopy code
    from utilidades import matematicas
    
    
  4. Alias de Paquetes: Puedes asignar alias a los paquetes para hacer m谩s corta la notaci贸n de punto al importar. Por ejemplo:

    pythonCopy code
    import utilidades.matematicas as math
    
    
  5. __init__.py: El archivo __init__.py puede contener c贸digo de inicializaci贸n para el paquete. Este c贸digo se ejecutar谩 cuando se importe el paquete. Esto es 煤til para realizar configuraciones iniciales o definir variables globales para el paquete.

  6. Utilidad para Proyectos Grandes: Los paquetes son especialmente 煤tiles en proyectos grandes y complejos, ya que ayudan a mantener el c贸digo organizado y modular. Tambi茅n facilitan la reutilizaci贸n de c贸digo, ya que puedes importar f谩cilmente m贸dulos desde otros paquetes en tu proyecto.

  7. Ejemplo: Aqu铆 hay una estructura de paquetes de ejemplo:

    markdownCopy code
    proyecto/
    鈹溾攢鈹 __init__.py
    鈹溾攢鈹 main.py
    鈹溾攢鈹 utilidades/
    鈹   鈹溾攢鈹 __init__.py
    鈹   鈹溾攢鈹 matematicas.py
    鈹   鈹斺攢鈹 cadena.py
    鈹斺攢鈹 datos/
        鈹溾攢鈹 __init__.py
        鈹溾攢鈹 cargar.py
        鈹斺攢鈹 guardar.py
    
    

En resumen, los paquetes en Python son una forma efectiva de organizar y estructurar tu c贸digo en proyectos m谩s grandes. Ayudan a mantener la claridad y la modularidad de tu c贸digo al agrupar m贸dulos relacionados en directorios jer谩rquicos.

import main

main.ejecutar()

print (main.data)

Por si os ha pasado, que a mi s铆 y casi me vuelvo loco, que os dice que no existe el modulo 鈥減kg鈥, solo crear dentro el file de 鈥init.py鈥 y correr谩 sin problema alguno.

Suerte compa帽eros!

Me gust贸 mucho como se manejan los paquetes

Excelente clase!!

si se hace asi:

from pkg.mod_1 import *

se importa todo no solo una funcion

Le ped铆 a Bing una analog铆a de namespace con minecraft, aqu铆 el resultado:

Seg煤n la documentaci贸n de Python hay dos tipo de paquetes: regular packages y namespaces packages. Estos 煤ltimos se introdujeron en la versi贸n 3.3. La diferencia entre ellos es la manera de organizar y distribuir los m贸dulos. Los namespaces packages permiten tener m贸dulos en diferentes ubicaciones; los regular packages, no. Al tener todo en una solo ubicaci贸n, los regular packages permiten entender y visualizar c贸mo se organizan los m贸dulos y c贸mo se relacionan entre s铆 de una manera m谩s sencilla.

Una de las maneras mas ordenadas es importar el modulo

from pkg import mod_1, mod_2

print(mod_1.func_1())
print(mod_1.func_2())

print(mod_2.func_3())
print(mod_2.func_4())
# Paquete = carpeta con varios modulos
'''
from pkg.mod_1 import func_1, func_2
from pkg.mod_2 import func_3, func_4

print(func_1())
print(func_2())
print(func_3())
print(func_4())
'''

import pkg
print(pkg.URL)
print(pkg.mod_1.func_1())

print('Se inicio paquete')

URL = 'platzi.com'

import pkg.mod_1, pkg.mod_2

Me doy cuenta de como a pesar de que casi termine con todo lo que hay que ver respecto a Javascript en platzi, excepto por los frameworks y las pruebas, hay muchos conceptos que en las rutas de JavaScript no se ense帽an o indagan de manera correcta, simplemente se obvia que existen, y aqu铆 si veo el como se toma el peque帽o momento de explicar esos conceptos, si bien no se explican de manera t茅cnica si lo suficiente como para comprender y utilizar, son conceptos que si bien pueden a llegar a cambiar en nombre son pr谩cticamente iguales en varios lenguajes.
THX

Buenos d铆as. Me gustar铆a dejar un aporte para nada trivial, para aquellos que est茅n haciendo los ejercicios en VSC, o en Anaconda por ejemplo.

En cualquiera de los dos casos, antes de poder usar un package van a tener que instalar el mismo. En el caso de VSC directo lo van a tener que hacer as铆:

$ pip install {package_name}/{package_route}

Si usamos package_name o package_route va a depender de si el paquete est谩 subido a un repo o es local. En el primer caso es package_name. En el segundo caso en package_route.

Tengan en cuenta que si instalan el package en Anaconda, en un ambiente, y luego quieren reutilizar el mismo en otro proyecto van a tener que volver a instalarlo.

Para ver si el paquete est谩 instalado y puede ser utilizado pueden usar el comando:

$ pip show {package_name}/{package_route}

Espero sea de utilidad.

Saludos,
Marian.

Me queda muy claro el uso de init.p, excelente clase.

CONCLUSION
Lo que hace init.py es 鈥渃onvertir鈥 un directorio en un modulo (paquete) que contiene otros m贸dulos, y esto lo hace para poder importarlos.

init_py:

print('se inicio paquete')

URL = 'platzi.com'

main_py sin init

from pkg.mod_1 import func_1, func_2
from pkg.mod_2 import func_3, func_4

print(func_1())
print(func_2())
print(func_3())
print(func_4())

mod_2.py:

def func_3():
    return 'func 3'

def func_4():
    return 'func 4'

mod_1.py

def func_1():
    return 'func 1'

def func_2():
    return 'func 2'

al usar from .item hace referencia a un 鈥渟alto鈥 hacia atras para buscar la carpeta item

Tambien pudimos haber configurado los archivos de esta manera:

init

main

Y nos dar铆a la siguiente salida:

Es por eso que con frecuencia veremos los archivos init vacios.

Muy buena clase, te abre la mente a nuevas posibilidades

Hola, yo soy cient铆fico de datos certificado, tengo 1 a帽o de experiencia, me parece que hay muchas cosas de este curso que no son necesarios, sirven para aprender pero no sirven, c贸mo esta clase por ejemplo

Sab铆a que se pod铆a importar archivos desde el init. py (dunder init), por trabajar con cookiecutters para django pero esta explicaci贸n me ha encantado 馃憣 11/10, me alegra volver a tomar estos cursos y aprender algo nuevo.

Los namespace son una gran idea鈥 tengamos m谩s de esos.

'''
from pkg.mod_1 import func_1, func_2
from pkg.mod_2 import func_3, func_4

print(func_1())
print(func_2())
print(func_3())
print(func_4())
'''

import pkg
print(pkg.URL)
print(pkg.mod_1.func_1())
def cuadrado(n):
	return(n**2)
def cubo(n):
	return(n**3)
if __name__ == "__main__":
	print(cuadrado(3))
	print(cubo(3))
No puedo importar pkg.mod\_1 me dice 'Import "pkg.mod\_1" could not be resolved' en el editor y 'No module named 'pkg.mod\_1' en la consola. Tanto la carpeta como los archivos si existen. ![](https://static.platzi.com/media/user_upload/image-0f6c1ae0-d788-45a2-8366-bf7dcbe606d8.jpg)