Guia Educativa Python - Definición de Funciones Principales en Python
Guia Educativa Python - Definición de Funciones Principales en Python
Tabla de contenido
Un Python básico principal ()
Modos de ejecución en Python
Ejecución desde la línea de comandos
Importación a un módulo o al intérprete interactivo
Mejores prácticas para las funciones principales de Python
Ponga la mayor parte del código en una función o clase
Use if __name__ == "__main__" para controlar la ejecución de su código
Cree una función llamada main() para que contenga el código que desea ejecutar
Llamar a otras funciones desde main()
Resumen de las mejores prácticas de la función principal de Python
Conclusión
Quitar anuncios
Ver ahora Este tutorial tiene un curso de video relacionado creado por el equipo de Real Python. Mírelo junto
con el tutorial escrito para profundizar su comprensión: Definición de funciones principales en Python
Muchos lenguajes de programación tienen una función especial que se ejecuta automáticamente cuando un sistema
operativo comienza a ejecutar un programa. Esta función generalmente se llama main()y debe tener un tipo de
retorno y argumentos específicos de acuerdo con el estándar del idioma. Por otro lado, el intérprete de Python
ejecuta scripts que comienzan en la parte superior del archivo y no hay una función específica que Python ejecute
automáticamente.
Sin embargo, tener un punto de partida definido para la ejecución de un programa es útil para comprender cómo
funciona un programa. Los programadores de Python han ideado varias convenciones para definir este punto de
partida.
Descarga gratuita: obtenga un capítulo de muestra de Python Tricks: The Book que le muestra las mejores
prácticas de Python con ejemplos simples que puede aplicar instantáneamente para escribir un código Pythonic
más hermoso.
Python
def main():
print("Hello World!")
if __name__ == "__main__":
main()
En este código, hay una función llamada main()que imprime la frase Hello World!cuando el intérprete de Python la
ejecuta. También hay una ifinstrucción condicional (o ) que verifica el valor de __name__y lo compara con la cadena
"__main__". Cuando la ifinstrucción se evalúa como True, el intérprete de Python se ejecuta main(). Puede leer más
sobre declaraciones condicionales en declaraciones condicionales en Python .
Este patrón de código es bastante común en los archivos de Python que desea ejecutar como un script e importar en
otro módulo . Para ayudar a comprender cómo se ejecutará este código, primero debe comprender cómo se
establece el intérprete de Python __name__según cómo se ejecuta el código.
Quitar anuncios
Puede leer mucho más sobre estos enfoques en Cómo ejecutar sus secuencias de comandos de Python . No importa
qué forma de ejecutar su código esté usando, Python define una variable especial llamada __name__que contiene una
cadena cuyo valor depende de cómo se usa el código.
Usaremos este archivo de ejemplo, guardado como execution_methods.py, para explorar cómo cambia el
comportamiento del código según el contexto:
Python
En este archivo, hay tres llamadas para print()definir. Los dos primeros imprimen algunas frases introductorias. El
tercero print()primero imprimirá la frase The value of __name__ isy luego imprimirá la representación de la
__name__variable usando el repr().
En Python, repr()muestra la representación imprimible de un objeto. Este ejemplo se utiliza repr()para enfatizar
que el valor de __name__es una cadena. Puede obtener más información repr()en la documentación de Python .
Verá las palabras archivo , módulo y secuencia de comandos que se utilizan en este artículo. Prácticamente, no hay
mucha diferencia entre ellos. Sin embargo, existen ligeras diferencias en el significado que enfatizan el propósito de
una pieza de código:
https://realpython.com/python-main-function/ 2/11
03/07/2023, 00:23 Definición de funciones principales en Python – Real Python
1. Archivo: por lo general, un archivo de Python es cualquier archivo que contiene código. La mayoría de los
archivos de Python tienen la extensión .py.
2. Script: un script de Python es un archivo que tiene la intención de ejecutar desde la línea de comandos para
realizar una tarea.
3. Módulo: un módulo de Python es un archivo que pretende importar desde dentro de otro módulo o un script, o
desde el intérprete interactivo. Puede leer más sobre los módulos en Módulos y paquetes de Python: una
introducción .
Esta distinción también se analiza en Cómo ejecutar sus secuencias de comandos de Python .
Cuando ejecuta un script, no podrá definir de forma interactiva el código que está ejecutando el intérprete de Python.
Los detalles de cómo puede ejecutar Python desde su línea de comandos no son tan importantes para el propósito de
este artículo, pero puede expandir el cuadro a continuación para leer más sobre las diferencias entre la línea de
comandos en Windows, Linux y macOS.
Ahora debe ejecutar el execution_methods.pyscript desde la línea de comando, como se muestra a continuación:
Shell
$ python3 execution_methods.py
This is my file to test Python's execution methods.
The variable __name__ tells me which context this file is running in.
The value of __name__ is: '__main__'
En este ejemplo, puede ver que __name__tiene el valor '__main__', donde las comillas ( ') le indican que el valor
tiene el tipo de cadena.
Recuerda que, en Python, no hay diferencia entre cadenas definidas con comillas simples ( ') y comillas dobles ( ").
Puede leer más sobre la definición de cadenas en Tipos de datos básicos en Python .
Encontrará un resultado idéntico si incluye una línea shebang en su secuencia de comandos y la ejecuta directamente
( ./execution_methods.py), o usa la %runmagia en IPython o Jupyter Notebooks.
También puede ver las secuencias de comandos de Python ejecutadas desde dentro de los paquetes agregando el -
margumento al comando. La mayoría de las veces, verá este recomendado cuando esté usando pip: python3 -m pip
install package_name.
El valor de un módulo __name__se establece igual que '__main__'cuando se lee desde una entrada
estándar, un script o desde un aviso interactivo. ( Fuente )
__name__se almacena en el espacio de nombres global del módulo junto con __doc__, __package__y otros
atributos. Puede leer más sobre estos atributos en la documentación del modelo de datos de Python y,
específicamente para módulos y paquetes, en la documentación de importación de Python .
Quitar anuncios
https://realpython.com/python-main-function/ 3/11
03/07/2023, 00:23 Definición de funciones principales en Python – Real Python
Durante el proceso de importación, Python ejecuta las declaraciones definidas en el módulo especificado (pero solo
la primera vez que importa un módulo). Para demostrar los resultados de importar su execution_methods.pyarchivo,
inicie el intérprete interactivo de Python y luego importe su execution_methods.pyarchivo:
Python >>>
En esta salida de código, puede ver que el intérprete de Python ejecuta las tres llamadas a print(). Las dos primeras
líneas de salida son exactamente las mismas que cuando ejecutó el archivo como un script en la línea de comando
porque no hay variables en ninguna de las dos primeras líneas. Sin embargo, hay una diferencia en la salida del
tercero print().
Cuando el intérprete de Python importa código, el valor de __name__se establece para que sea el mismo que el
nombre del módulo que se está importando. Puede ver esto en la tercera línea de salida anterior. __name__tiene el
valor 'execution_methods', que es el nombre del .pyarchivo desde el que Python está importando.
Tenga en cuenta que si importvuelve a ejecutar el módulo sin salir de Python, no habrá salida.
Nota: Para obtener más información sobre cómo funciona la importación en Python, consulte Importación de
Python: técnicas y consejos avanzados , así como importaciones absolutas y relativas en Python .
Aprenderá sobre cuatro mejores prácticas para asegurarse de que su código pueda cumplir un doble propósito:
En estos casos, desea que el usuario controle la activación de la ejecución de este código, en lugar de permitir que el
intérprete de Python ejecute el código cuando importa su módulo.
Por lo tanto, la mejor práctica es incluir la mayor parte del código dentro de una función o una clase . Esto se debe
a que cuando el intérprete de Python encuentra las palabras clave defoclass , solo almacena esas definiciones para
su uso posterior y en realidad no las ejecuta hasta que se lo indique.
Python
sleep()detiene el intérprete durante la cantidad de segundos que proporcione como argumento y producirá una
función que tarda mucho tiempo en ejecutarse para este ejemplo. A continuación, utiliza print()para imprimir una
oración que describa el propósito de este código.
1. Imprime algo de salida para decirle al usuario que el procesamiento de datos está comenzando
2. Modifica los datos de entrada
3. Detiene la ejecución durante tres segundos usandosleep()
4. Imprime alguna salida para decirle al usuario que el procesamiento ha terminado
5. Devuelve los datos modificados
Ahora, ¿qué sucederá cuando ejecute este archivo como un script en la línea de comando?
El intérprete de Python ejecutará las líneas from time import sleepy print()que están fuera de la definición de la
función, luego creará la definición de la función llamada process_data(). Luego, el script saldrá sin hacer nada más,
porque el script no tiene ningún código que se ejecute process_data().
El siguiente bloque de código muestra el resultado de ejecutar este archivo como un script:
Shell
$ python3 best_practices.py
This is my file to demonstrate best practices.
La salida que podemos ver aquí es el resultado de la primera print(). Tenga en cuenta que la importación desde
timey la definición process_data()no producen ningún resultado. ¡Específicamente, las salidas de las llamadas a
print()que están dentro de la definición de process_data()no se imprimen!
Cuando importe este archivo en una sesión interactiva (u otro módulo), el intérprete de Python realizará exactamente
los mismos pasos que cuando ejecuta el archivo como un script.
Una vez que el intérprete de Python importa el archivo, puede usar cualquier variable, clase o función definida en el
módulo que ha importado. Para demostrar esto, usaremos el intérprete interactivo de Python. Inicie el intérprete
interactivo y luego escriba import best_practices:
Python >>>
Quitar anuncios
https://realpython.com/python-main-function/ 5/11
03/07/2023, 00:23 Definición de funciones principales en Python – Real Python
Python
11 if __name__ == "__main__":
12 data = "My data read from the Web"
13 print(data)
14 modified_data = process_data(data)
15 print(modified_data)
En este código, agregó una declaración condicional que verifica el valor de __name__. Este condicional se evaluará
Truecuando __name__sea igual a la cadena "__main__". Recuerde que el valor especial de "__main__"para la
__name__variable significa que el intérprete de Python está ejecutando su script y no lo está importando.
Dentro del bloque condicional, agregó cuatro líneas de código (líneas 12, 13, 14 y 15):
Líneas 12 y 13: está creando una variable dataque almacena los datos que ha adquirido de la Web y los está
imprimiendo.
Línea 14: Estás procesando los datos.
Línea 15: Está imprimiendo los datos modificados.
Ahora, ejecute su best_practices.pysecuencia de comandos desde la línea de comando para ver cómo cambiará la
salida:
Shell
$ python3 best_practices.py
This is my file to demonstrate best practices.
My data read from the Web
Beginning data processing...
Data processing finished.
My data read from the Web that has been modified
Después de eso, datase imprime el valor de. Esto sucedió porque la variable __name__tiene el valor
"__main__"cuando el intérprete de Python ejecuta el archivo como un script, por lo que la declaración condicional se
evaluó como True.
Ahora debe verificar qué sucede cuando importa el best_practices.pyarchivo desde el intérprete interactivo (u otro
módulo). El siguiente ejemplo demuestra esta situación:
Python >>>
¡Observe que obtiene el mismo comportamiento que antes de agregar la declaración condicional al final del archivo!
Esto se debe a que la __name__variable tenía el valor "best_practices", por lo que Python no ejecutó el código
dentro del bloque, incluido process_data(), porque la declaración condicional se evaluó como False.
https://realpython.com/python-main-function/ 6/11
03/07/2023, 00:23 Definición de funciones principales en Python – Real Python
Cree una función llamada main() para que contenga el código que desea
ejecutar
Ahora puede escribir código Python que puede ejecutarse desde la línea de comando como un script e importarse sin
efectos secundarios no deseados. A continuación, aprenderá cómo escribir su código para que sea más fácil para
otros programadores de Python seguir lo que quiere decir.
Muchos lenguajes, como C , C++ , Java y varios otros, definen una función especial que debe llamarse main()y que el
sistema operativo llama automáticamente cuando ejecuta el programa compilado. Esta función a menudo se
denomina punto de entrada porque es donde la ejecución ingresa al programa.
Por el contrario, Python no tiene una función especial que sirva como punto de entrada a un script. ¡En realidad,
puede dar a la función de punto de entrada en un script de Python el nombre que desee!
Aunque Python no asigna ningún significado a una función llamada main(), la mejor práctica es nombrar la función
de punto de entradamain() de todos modos. De esa forma, cualquier otro programador que lea su secuencia de
comandos sabrá de inmediato que esta función es el punto de partida del código que realiza la tarea principal de la
secuencia de comandos.
Además, main()debe contener cualquier código que desee ejecutar cuando el intérprete de Python ejecute el
archivo. Esto es mejor que poner el código directamente en el bloque condicional porque un usuario puede
reutilizarlo main()si importa su módulo.
Python
En este ejemplo, agregó la definición de main()que incluye el código que estaba previamente dentro del bloque
condicional. Luego, cambiaste el bloque condicional para que se ejecute main(). Si ejecuta este código como un
script o lo importa, obtendrá el mismo resultado que en la sección anterior.
Quitar anuncios
1. Lee un archivo de datos de una fuente que podría ser una base de datos, un archivo en el disco o una API web
2. Procesa los datos
3. Escribe los datos procesados en otra ubicación.
https://realpython.com/python-main-function/ 7/11
03/07/2023, 00:23 Definición de funciones principales en Python – Real Python
Si implementa cada una de estas subtareas en funciones separadas, entonces es fácil para usted (u otro usuario)
reutilizar algunos de los pasos e ignorar los que no desea. Luego puede crear un flujo de trabajo predeterminado en
main(), y puede tener lo mejor de ambos mundos.
Si aplicar esta práctica a su código es una decisión de su parte. Dividir el trabajo en varias funciones facilita la
reutilización, pero aumenta la dificultad para que otra persona intente interpretar su código porque tiene que seguir
varios saltos en el flujo del programa.
Python
En este código de ejemplo, las primeras 10 líneas del archivo tienen el mismo contenido que tenían antes. La
definición de la segunda función en la línea 12 crea y devuelve algunos datos de muestra, y la definición de la tercera
función en la línea 17 simula escribir los datos modificados en una base de datos.
En la línea 21, main()se define. En este ejemplo, ha modificado main()para que llame a las funciones de lectura de
datos, procesamiento de datos y escritura de datos a su vez.
En primer lugar, se datacrea a partir de read_data_from_web(). Esto datase pasa a process_data(), que devuelve el
modified_data. Finalmente, modified_datase pasa a write_data_to_database().
Las últimas dos líneas del script son el bloque condicional que verifica __name__y ejecuta main()si la ifdeclaración
es True.
Ahora, puede ejecutar toda la canalización de procesamiento desde la línea de comando, como se muestra a
continuación:
Shell
$ python3 best_practices.py
This is my file to demonstrate best practices.
Reading data from the Web
Beginning data processing...
Data processing finished.
Writing processed data to a database
Data from the web that has been modified
En el resultado de esta ejecución, puede ver que el intérprete de Python ejecutó main(), que ejecutó
read_data_from_web(), process_data()y write_data_to_database(). Sin embargo, también puede importar el
best_practices.pyarchivo y reutilizarlo process_data()para una fuente de datos de entrada diferente, como se
https://realpython.com/python-main-function/ 8/11
03/07/2023, 00:23 Definición de funciones principales en Python – Real Python
muestra a continuación:
Python >>>
El proceso de importación provocó que el intérprete de Python ejecutara todas las líneas de código del
best_practices.pyarchivo, por lo que el resultado muestra la línea que explica el propósito del archivo.
Luego, almacenó datos de un archivo en datalugar de leer los datos de la Web. Luego, reutilizaste process_data()y
write_data_to_database()del best_practices.pyarchivo. En este caso, aprovechó la reutilización de su código en
lugar de definir toda la lógica en main().
1. Coloque el código que tarda mucho tiempo en ejecutarse o tiene otros efectos en la computadora en una
función o clase, para que pueda controlar exactamente cuándo se ejecuta ese código.
2. Utilice los diferentes valores de __name__para determinar el contexto y cambiar el comportamiento de su código
con una declaración condicional.
3. Debe nombrar su función de punto de entrada main()para comunicar la intención de la función, aunque Python
no asigna ningún significado especial a una función llamada main().
4. Si desea reutilizar la funcionalidad de su código, defina la lógica en funciones externas main()y llame a esas
funciones dentro de main().
Quitar anuncios
Conclusión
¡Felicidades! Ahora sabe cómo crear main()funciones de Python.
Aprendiste lo siguiente:
Conocer el valor de la __name__variable es importante para escribir código que tenga el doble propósito de
script ejecutable y módulo importable.
__name__toma diferentes valores dependiendo de cómo ejecutó su archivo de Python. __name__será igual a:
"__main__"cuando el archivo se ejecuta desde la línea de comando o con python -m(para ejecutar el
__main__.pyarchivo de un paquete)
Ver ahoraEste tutorial tiene un curso de video relacionado creado por el equipo de Real Python. Mírelo junto
con el tutorial escrito para profundizar su comprensión: Definición de funciones principales en Python
https://realpython.com/python-main-function/ 9/11