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

M贸dulos como scripts: __name__ y __main__

28/44
Recursos

Aportes 52

Preguntas 17

Ordenar por:

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

o inicia sesi贸n.

if name == 鈥main鈥:
run()

Se le llama: Entry point

Este if dice que si es ejecutado desde la terminal, entre al run y si es ejecutado desde otro archivo, no se ejecuta.

if __name__ == "__main__":
	run()

M脫DULOS COMO SCRIPTS: NAME y MAIN

Cuando utilizamos name == 鈥main鈥 estamos dando dualidad a cierta funci贸n para que sea ejecutada en dos archivos distintos.

Para ello debemos tener en cuenta que su uso esta catalogado de dos maneras:

  1. Se puede ejecutar el archivo como un script.
  2. Importando el codding de un archivo a otro archivo python.

Para Python, es independiente cual de las dos formas estemos utilizando el c贸digo, ya que python define una variable especial llamada __name__ la cual contiene un string y cuyo resultado depender谩 de la forma en como sea usada.

Como en el ejemplo, se observa que el primer archivo que denominamos main.py.

main.py

import utils

keys, values = utils.get_population()
print(keys, values)

data = [
  {
    'country': 'Colombia',
    'Population': 500
  },
  {
    'country': 'Peru',
    'Population': 250
  },
  {
    'country': 'Argentina',
    'Population': 350
  }
]

def run():
  keys, values = utils.get_population()
  print(keys, values)

  country = input('Digite el pa铆s: ')
  result = utils.population_by_countrie(data, country)
  print(result)

if __name__ == '__main__':
  run()

Cuando ejecutamos el archivo directamente como un script nuestra variable if __name__ tomara el valor de __main__

Al ser ejecutado nuestro output ser谩 el siguiente:

Producci贸n:

Digite el pa铆s: Peru
[{'country': 'Peru', 'Population': 250}]

Con esto podemos concluir que la funci贸n __name__ == '__main__' ayuda a que python identifique de que manera se debe ejecutar e o los m贸dulos 贸 script.
Material de apoyo

El profe Facundo nos habl贸 de utilizar el entry point como una buena pr谩tica de programaci贸n. Ahora Nicol谩s nos explica la raz贸n detr谩s de su uso. Agradecido con ambos.

  • **__name__**es una variable especial en Python que contiene el nombre del m贸dulo en el que se est谩 ejecutando el c贸digo.
  • Cuando ejecutas un archivo como un script principal en Python, el valor de __name__
    es igual a "__main__". Esto significa que el archivo se est谩 ejecutando como un script principal y no est谩 siendo importado por otro m贸dulo o script.
  • Por ejemplo, si tienes un archivo llamado **mi_script.py**con el siguiente c贸digo:
print(__name__)
#Output: __main__
  • En cambio, si importas **mi_script.py**desde otro m贸dulo o script, el valor de **__name__**ser谩 el nombre del m贸dulo (en este caso, mi_script).
  • Por lo tanto, cuando escribes if __name__ == "__main__":, est谩s diciendo 鈥渟i estoy ejecutando este archivo como un script principal, ejecuta el c贸digo dentro de este bloque鈥.
  • Esto es 煤til porque te permite escribir c贸digo que solo se ejecute cuando el archivo se ejecute como un script principal y no cuando se importe como un m贸dulo.

Me qued茅 algo confundido con la explicaci贸n de if name == main as铆 que sal铆 a investigar un poco y encontr茅 este art铆culo que les comparto. Ahora lo tengo m谩s claro.

un recurso muy util sobre la misma sentencia me ayudo mucho en mis inicios con Python
https://realpython.com/if-name-main-python/

Modulos como Script

Un archivo py se corre como script al ejecutarlo en la linea de comando como:

 >> python utils.py

Y tambien puede correr desde otro archivo (main) cuando es utilizado como modulo:

import utils
>> python main.py

Sin embargo, al querer utilizar una de las funciones del main en otro archivo (example) ocurre que se ejecuta primero todo el archivo main para luego darte acceso a la funcion requerida por el archivo example. Esto es un problema ya que solo quieres utilizar la funcion sin que se ejecute todo el main. La solucion se conoce como los DATAPOINT

# indica que si el archivo es ejecutado desde la terminal se ejecute run()
# en caso de ser ejecutado desde otro archivo como modulo no se corra run()
if __name__ == '__main__':
	run()

Esto le da la dualidad a los modulos de ejecutarse tanto como script desde la terminal como tambien desde otro archivo como un modulo

El archivo main puede reestructurarse de la siguiente manera para que tome la dualidad antes mencionada:

# llamar al modulo utils
import utils

# lista de paises con su repectiva poblacion
data = [
  {
    'Country':'colombia',
    'Population':30
  },
  {
    'Country':'bolivia',
    'Population':18
  },
  {
    'Country':'mexico',
    'Population':100
  },
  {
    'Country':'nicaragua',
    'Population':7
  }
]

def run():
  # utilizar la funcion get_population
  Pais, Poblacion = utils.get_population()
  print(Pais, Poblacion)
  
  # utilizar la variable A
  print(utils.A)
  
  # obtener la poblacion de un pais especifico
  poblacion = utils.population_by_country(data, 'mexico')
  print(poblacion)
  
  # obtener el pais del cual queremos saber su poblacion de forma dinamica
  country = input('Digite el pais: ')
  poblacion_pais = utils.population_by_country(data, country)
  print(poblacion_pais) 

if __name__ == '__main__':
  run()

Las instrucciones de main quedan encerradas en una funcion llamada run() y se agrega el datapoint junto a la funcion run() para que esta corra solo cuando el archivo sea ejecutado desde la terminal.

En el archivo example pedimos que se muestre data y que se ejecute la funcion run() del archivo main de la siguiente manera:

import main

# obtener la data del archivo main
print(main.data)
main.run()

En resumen, su nombre tecnico es entry point, punto de entrada.

Y nos permite definir que el modulo pueda ser usado cuando se ejecuta desde la terminal, y previene que esa ejecucion ocurra cuando es llamado desde otro archivo como modulo, evitando as铆 una doble ejecucion.

# Entry point
if __main__ == "_main__:
run()

Recomiendo mucho leer este peque帽o post para entender mucho mejor la importancia de:

if __name__ == "__main__":
    main():

Muy muy muy muy muy necesario y 煤til en casi cualquier programa de python.

No entiendo porque igual me corre el programa, es decir me el modulo me lee la funcion as铆 no la invoque

Aqu铆 un recurso que les puede servir: <https://www.geeksforgeeks.org/__name__-a-special-variable-in-python/> B谩sicamente, cualquier archivo que sea ejecutado **directamente** desde la consola, python lo coloca el nombre de `__main__`. Les invito a jugar e imprimirlo `print(__name__)` por todo lado, para ver qu茅 nombres les aparece.

Como aportacion adicional, me gustaria que especifiquen que informacion debe ir en el main .py y que en los demas archivos.

Por que yo de priumera instancia pensaria que en MAIN se va a poner solo el codigo principal. Por ende, en el se van a llamar los modulos que que necesiten.
Pero viendo el video, hacen todo lo opuesto.
Me gustaria que aclararan esta parte.

隆Estas clases son excelentes! 隆Gracias, Nico! Empec茅 a estudiar con estas clases cuando a煤n no trabajaba en IT y, ahora que s铆 trabajo en esta industria, vuelvo a ellas para recuperar ideas importantes. 隆Muy agradecido! Saludos desde Buenos Aires (Argentina).

Yo no s茅 a vosotros, pero yo personalmente, haciendome apunte es mi OneNote, con capturas de pantalla y apuntes en cada captura, entiendo esto mucho mejor, aunque tarde 50 minutos en acabar este video de solo 8 minutos.
Genial la clase!

Honestamente no entend铆 nada de esto.

Me gust贸 esta clases, no entend铆a porque el if

por primera vez alguien explico bien para que sirve el

if __name__ == "__main__":

Modulos como scripts

  • Cuando un m贸dulo de Python se ejecuta como un script independiente, se utiliza una variable especial llamada 鈥渘ame鈥.

  • Se utiliza para determinar si el m贸dulo se est谩 ejecutando como script o se est谩 importando como un m贸dulo en otro script.

  • Si el m贸dulo se est谩 ejecutando como script, el valor de 鈥渘ame鈥 ser谩 鈥渕ain鈥.

  • Si el m贸dulo se est谩 importando en otro script, el valor de 鈥渘ame鈥 ser谩 el nombre del m贸dulo.

  • Esta distinci贸n es importante porque permite que un m贸dulo se comporte de manera diferente dependiendo de c贸mo se est茅 utilizando.
    Por ejemplo, si un m贸dulo se est谩 ejecutando como script, puede realizar algunas operaciones de prueba o depuraci贸n adicionales que no son necesarias si se est谩 importando en otro script.

  • Si un m贸dulo se est谩 importando, puede proporcionar funciones y variables 煤tiles sin ejecutar c贸digo adicional innecesariamente.

Entonces:
La variable especial 鈥渘ame鈥 en Python permite que un m贸dulo se comporte de manera diferente dependiendo de si se est谩 ejecutando como script o se est谩 importando en otro script, lo que permite una mayor flexibilidad y eficiencia en la programaci贸n.

__ name __ ejecutado desde el propio modulo (modulo a) es igual a __ main __, pero si el (modulo a) se importa y ejecuta desde otro modulo (modulo b), __ name __ es igual al nombre del modulo importado (modulo a).
De esta manera, con el:

if __name__ == '__main__'

podemos controlar que parte del codigo queremos que se ejecute solo si es llamado desde el propio modulo.

https://www.youtube.com/watch?v=Fh3RfVKWVII

al colocar "if __name__ == '__main__': run()", la finalidad de esto es que si: 1. Si importas el m贸dulo (archivo .py) dentro de otro archivo, no se ejecute autom谩ticamente, sino que tu puedes controlar la ejecuci贸n haciendo el llamado de las funciones (import functools ... functools.reduce() ). 2. Si ejecutas el m贸dulo como script desde la terminal, la funci贸n(es) que est茅n declaradas despu茅s del "entry point", se ejecutar铆an tambi茅n autom谩ticamente. Esto siempre lo he visto en los otros cursos y ahora lo entiendo

# punto de inicio o punto de entrada de un programa o aplicaci贸n
# entry point
if __name__ == '__main__':
    run()

"""
Esta estructura se utiliza para asegurarse de que el c贸digo dentro del bloque if __name__ == '__main__': 
solo se ejecute cuando el archivo de Python se 
ejecuta directamente como un programa y no cuando se importa como un m贸dulo en otro programa.
"""

Como coreccion a mi anterior aportacion, esta es la correctaahora con las buenas practicas.

main .py

import all_variations
all_variations.run() 

all_variations.py

def run():
  word = input('驴Que palabra o Frase quieres validar? ')
  variations = {
    'Original': word
  }
  variations['Mayusculas'] = word.upper()
  variations['Minusculas'] = word.lower()
  variations['Nom Prop'] = word.title()
  print(variations)
  return variations


if __name__ == '__main__':
  run() 

Gran clase!.

seguramente te estes preguntando.
que es un script?: Es un archivo que realiza una terea especifica dentro del programa que tu creas, para iniciar un programa, conectar, para finalizar, osea hace algo espeifico en el codigo
que es un modulo?: Es un archivo que se reutiliza mientras corre el programa, que se debe importar, te devuelve un resultado, tiene variables,funciones, objetos mas iterables.

https://www.youtube.com/watch?v=wZKTUcTqekw

por si alguno como yo no pudo entender esta clase en particular

Le dije a Bing que hiciese una analog铆a con minecraft sobre este tema, aqu铆 el resultado:

Para tener en cuenta el __main__ es porque as铆 es el syntax no porque el archivo se llame main, realmente el archivo puede llamarse de cualquier forma. Algo que quise probar y comparto.

Si no queremos que al importar se ejecute todo un m贸dulo, solo lo invocado, para eso tenemos que modularizarlo, una forma es embeberlo en una funci贸n, para ejecutarlo expl铆citamente desde example_py.

import main

print('example =>', main.data)
main.run()

Si quiero controlar desde example_py la ejecuci贸n de main o elementos de este m贸dulo, pero a la vez la dualidad de ejecutar main_py como script desde la terminal, usamos el entry point:

if __name__ == '__main__':
  run()

Este if o entry point le dice al main_py que si se ejecuta como script desde la terminal, lo har谩 con normalidad, pero si se ejecuta desde otro archivo como m贸dulo, este no se ejecutar谩.

import utils

keys, values = utils.get_population()
print(keys, values)

data = [
  {
    'Country': 'Colombia',
    'Population':50
  },
 {
    'Country': 'Bolivia',
    'Population':30
  },
  {
    'Country': 'USA',
    'Population':300
  },

]

def run():

  country = input('Type Country => ')
  result = utils.population_by_country(data, country)
  print(result)

if __name__ == '__main__':
  run()

Me sale este error cuando ejecuto en la terminal y no s茅 como solucionarlo =S

/home/runner/Python102/venv/bin/python: line 3: exec: : not found

En caso de que el usuario ingrese el nombre del pa铆s en min煤sculas, o en may煤sculas, etc.

<country = input("Type country ---> ")
country = country.capitalize()

result = utils.population_by_country(data, country)

print(result)> 

Ejecutar archivos .py tanto como modulos y como scripts

codigo del archivo main del primer ejemplo

import utils

def run():
    keys, values = utils.get_population()
    print (keys, values)

    country = input("Enter a country: ")

    result = utils.population_by_country(data, country)
    print(result)

data = [
    {
    'Country': 'Colombia',
    'Population': 300
    },
    {
    'Country': 'Mexico',
    'Population': 500
    },
    {
    'Country': 'Bolivia',
    'Population': 150
    }
]

Existen varios errores comunes que pueden ocurrir al trabajar con m贸dulos y scripts en Python, algunos son:

  1. Errores de importaci贸n: Esto ocurre cuando se intenta importar un m贸dulo que no existe o que no est谩 en la ruta de b煤squeda de m贸dulos de Python. Tambi茅n puede ocurrir si se utiliza un nombre de m贸dulo incorrecto o si hay un error de sintaxis en el archivo de m贸dulo.

  2. Errores de nombre: Esto ocurre cuando se utiliza un nombre de variable, funci贸n o clase que no ha sido definido (no existe) o que no est谩 disponible en el alcance actual. Tambi茅n puede ocurrir si se utiliza un nombre de m贸dulo incorrecto o si hay un error de sintaxis en el archivo de script o m贸dulo.

  3. Errores de l贸gica: Esto ocurre cuando el c贸digo Python no funciona como se espera debido a un error en la l贸gica del programa. Estos errores pueden ser dif铆ciles de encontrar y solucionar, y pueden requerir una revisi贸n cuidadosa del c贸digo y una depuraci贸n paso a paso.

  4. Errores de sintaxis: (lo mas comun del mundo) Esto ocurre cuando se escribe un c贸digo que no sigue la sintaxis correcta de Python. Estos errores pueden ser causados por errores de tipeo, falta de par茅ntesis o comillas, o por cualquier otro tipo de error de sintaxis.

  • Errores de indentaci贸n: Esto ocurre cuando no se utilizan correctamente los espacios y las tabulaciones en el c贸digo Python. Python utiliza la indentaci贸n para indicar la estructura del c贸digo, por lo que un error de indentaci贸n puede causar errores de sintaxis o comportamiento inesperado en el c贸digo.

La clave esta en la ejecuci贸n

Un script en Python es simplemente un archivo que contiene c贸digo Python. Un script puede ser tan simple como una sola l铆nea de c贸digo o tan complejo como un programa completo con varias funciones y m贸dulos. Para ejecutar un script de Python, simplemente se debe ejecutar el int茅rprete de Python y pasar el nombre del archivo de script como argumento. Por ejemplo, si el archivo de script se llama 鈥渕i_script.py鈥, se puede ejecutar en la l铆nea de comandos:

python mi_script.py
# (ejecuta el archivo directamente con el contenido que tenga, se simple como un print() o todo un algoritmo) 

Esto ejecutar谩 el c贸digo en el archivo de script y mostrar谩 cualquier salida que produzca.

En Python, un m贸dulo es un archivo que contiene definiciones de variables, funciones y clases que se pueden utilizar en otros programas de Python. Los m贸dulos se utilizan para organizar el c贸digo en peque帽as unidades l贸gicas y para evitar conflictos de nombres de variables y funciones. Para utilizar un m贸dulo en un programa Python, primero debe importarse utilizando la instrucci贸n import. Luego, se pueden utilizar las funciones y variables del m贸dulo escribiendo el nombre del m贸dulo seguido de un punto y el nombre de la funci贸n o variable. Por ejemplo:

import math
variable_1 = math.sqrt(25)

modules

main

# Importamos el modulo
import utils

data = [
  {
    "Country": "Colombia",
    "Population": 500
  },
  {
    "Country": "Bolivia",
    "Population": 400
  }
]

def run():
  keys, values = utils.get_population()
  print(keys, values)
  country = input("Type Country => ")
  result = utils.population_by_country(data, country)
  print(result)

# M贸dulos como scripts: __name__ y __main__
# Entry point
'''
Este if le dice al main.py, que si el archivo es ejecutado desde la terminal, ejecute el metodo run, pero si es ejecutado desde otro archivo, el metodo run no se ejecutaria.
'''

if __name__ == '__main__':
  run()

example

import main

print(main.data)
# main.run()

Definitivamente la mejor explicaci贸n de porqu茅 y para qu茅 se usa el entry point, el cual es el if que se configur贸 al final del archivo main,py

El c贸digo dentro de la sentencia 鈥渋f name == 鈥榤ain鈥:鈥 es una verificaci贸n que se realiza en Python para determinar si un archivo est谩 siendo ejecutado directamente o si es importado como un m贸dulo en otro script.

Si un archivo se ejecuta directamente, su nombre ser谩 igual a 鈥渕ain鈥, por lo que el c贸digo dentro de la sentencia 鈥渋f name == 鈥榤ain鈥:鈥 se ejecutar谩.

Si, por otro lado, un archivo es importado como un m贸dulo en otro script, su nombre ser谩 el nombre del archivo en lugar de 鈥渕ain鈥, por lo que el c贸digo dentro de la sentencia 鈥渋f name == 鈥榤ain鈥:鈥 no se ejecutar谩.

main py

import utils
data=[
    {
        "country":"colombia",
        "poblacion":300
    },
    {
        "country":"peru",
        "poblacion":200
    }
]
def run():
    llaves,valores=utils.obtener_poblacion()
    print(llaves)
    print(valores)
    print(llaves,valores)

    letra=utils.A
    print(letra)

    data=[
        {
            "country":"colombia",
            "poblacion":300
        },
        {
            "country":"peru",
            "poblacion":200
        }
    ]
    pais=input("Ingrese el pais que desea buscar")
    datos_peru=utils.poblacion_por_pais(data,pais)
    print(datos_peru)

if __name__ == "__main__":
    run()
    
'''
Este if dice que si es ejecutado desde la terminal, 
entre al run y si es ejecutado 
desde otro archivo, no se ejecuta.
'''

example py

import main

#main.run() r
#Esto queda anulado con el if, no se podra correr desde otros
#modulos o archivos
#print("example",main.data)
#aparte de darme la data, se ejecuta todo el main 
print(main.data)

隆Excelente! Nunca hab铆a escuchado de esta posibilidad, que parece, sin embargo, tan necesaria.

En Python, se puede usar 鈥渕ain鈥 para determinar si un script est谩 siendo ejecutado directamente o si est谩 siendo importado como un m贸dulo en otro script. Esto se hace mediante el uso de la declaraci贸n if name == 鈥main鈥: en el script principal. El c贸digo dentro de esta declaraci贸n s贸lo se ejecutar谩 si el script se est谩 ejecutando directamente, pero no si est谩 siendo importado como un m贸dulo en otro script.

Por ejemplo, si tenemos un script llamado 鈥渟cript1鈥 que contiene el siguiente c贸digo:

def func1():
    print("This is function 1.")

if __name__ == "__main__":
    print("This is the main script.")
    func1()

Si ejecutamos el script directamente, veremos la salida: 鈥淭his is the main script.鈥 y 鈥淭his is function 1.鈥 pero si importamos este script en otro script y llamamos a la funcion func1() veremos solo 鈥淭his is function 1.鈥

Es una buena pr谩ctica usar if name == 鈥main鈥: en tus scripts para asegurarte de que el c贸digo s贸lo se ejecute cuando se desea ejecutar el script como un todo y no solo una parte del mismo.

驴C贸mo hizo para cambiar app/example.py rapidamente a app/main.py?

import utils

data= [
    {
      'Country':'Colombia',
      'Population':500
    },
    {
      'Country':'Bolivia',
      'Population':300
    }
  ]

def run(): 
  keys,values = utils.get_population()
  print(keys, values)
    
  country = input('Type Country => ')
  
  result = utils.population_by_country(data,country)
  print(result)
# ejecuta desde la termina
if __name__ == '__main__':
  run()
import main

print(main.data)
main.run()
#print('example => ',main.data)
  • En Python, el nombre especial main es utilizado para dos constructos importantes:
el nombre del entorno de m谩ximo nivel del programa, que puede ser verificado usando la expresi贸n __name__=='__main__'; y

el archivo __main__.py en paquetes de Python.

  • Ambos de estos mecanismos est谩n relacionados con m贸dulos de Python; como los usuarios interact煤an con ellos y como ellos interact煤an entre s铆. Est谩n explicados en detalle m谩s abajo. Si est谩s empezando con los m贸dulos de Python, mira la secci贸n tutorial M贸dulos para una introducci贸n.

```
name
== 'main
Cuando un m贸dulo o paquete de Python es importado, name es asignado al nombre del m贸dulo. Normalmente, este es el nombre del archivo de Python sin la extensi贸n .py:

Que tal, no pude quedarme con las ganas e implement茅 el c贸digo de esta clase tanto en vscode y en replit, despu茅s de algunas correcciones ya no marc贸 errores pero las gr谩ficas no las muestra, alguien sabe por qu茅? estoy sobre ubuntu con wsl ser谩 por eso? incluso instal茅 desde l铆nea de c贸digo matplotlib, y como no las mostraba debugee el c贸digo y si mostraba la lista con datos del archivo csv. Se me ocurri贸 ir a un jupyter el de colab de google y ah铆 si funciona 馃槉 espero alguien me oriente les dejo la jupyter notebook!

En esta clase me quedo super claro esa linea de codigo que encontraba en muchos archivos de python. Ahora entiendo su funcionalidad!

Por fin entend铆 claramente el funcionamiento del Entry Point