Introducción
A function is a block of instructions that performs an action and, once defined, can be reused. Functions make code more modular, allowing you to use the same code over and over again.
Python tiene una serie de funciones integradas con las que es posible que estés familiarizado, incluyendo:
print()
que imprimirá un objeto en la terminalint()
que convertirá un tipo de dato cadena o número a un tipo de dato enterolen()
que devuelve la longitud de un objeto
Los nombres de las funciones incluyen paréntesis y pueden incluir parámetros.
En este tutorial, repasaremos cómo definir tus propias funciones para usar en tus proyectos de codificación.
Requisitos previos
Deberías tener Python 3 instalado y un entorno de programación configurado en tu computadora o servidor. Si no tienes configurado un entorno de programación, puedes consultar las guías de instalación y configuración para un entorno de programación local o para un entorno de programación en tu servidor adecuado para tu sistema operativo (Ubuntu, CentOS, Debian, etc.).
Definición de una función
Comencemos convirtiendo el clásico programa “¡Hola, mundo!” en una función.
Crearemos un nuevo archivo de texto en nuestro editor de texto preferido y llamaremos al programa hello.py
. Luego, definiremos la función.
A function is defined by using the def
keyword, followed by a name of your choosing, followed by a set of parentheses which hold any parameters the function will take (they can be empty), and ending with a colon.
Información: Para seguir el código de ejemplo en este tutorial, abre una terminal interactiva de Python en tu sistema local ejecutando el comando python3
. Luego puedes copiar, pegar o editar los ejemplos agregándolos después del indicador >>>
.
En este caso, definiremos una función llamada hello()
:
Esto establece la declaración inicial para crear una función.
A partir de aquí, agregaremos una segunda línea con una sangría de 4 espacios para proporcionar las instrucciones sobre lo que hace la función. En este caso, estaremos imprimiendo ¡Hola, mundo!
en la consola:
Nuestra función ahora está completamente definida, pero si ejecutamos el programa en este punto, no sucederá nada porque no llamamos a la función.
Entonces, fuera de nuestro bloque de función definido, llamemos a la función con hello()
:
Ahora, ejecutemos el programa:
Deberías recibir la siguiente salida:
OutputHello, World!
Las funciones pueden ser más complicadas que la función hello()
que definimos anteriormente. Por ejemplo, podemos usar for
bucles, declaraciones condicionales y más dentro de nuestro bloque de función.
Por ejemplo, la función definida a continuación utiliza una declaración condicional para verificar si la entrada para la variable name
contiene una vocal, luego usa un for
bucle para iterar sobre las letras en la cadena name
.
La función names()
que definimos anteriormente establece una declaración condicional y un for
bucle, mostrando cómo se puede organizar el código dentro de una definición de función. Sin embargo, dependiendo de lo que pretendamos con nuestro programa y cómo queremos configurar nuestro código, es posible que queramos definir la declaración condicional y el for
bucle como dos funciones separadas.
Definir funciones dentro de un programa hace que nuestro código sea modular y reutilizable para que podamos llamar a las mismas funciones sin tener que volver a escribirlas.
Trabajando con Parámetros
Hasta ahora hemos visto funciones con paréntesis vacíos que no toman argumentos, pero podemos definir parámetros en las definiciones de funciones dentro de sus paréntesis.
A parameter is a named entity in a function definition, specifying an argument that the function can accept.
Vamos a crear un pequeño programa que tome parámetros x
, y
y z
. Crearemos una función que sume los parámetros juntos en diferentes configuraciones. Las sumas de estos serán impresas por la función. Luego llamaremos a la función y pasaremos números a la función.
Se pasó el número 1
para el parámetro x
, 2
para el parámetro y
, y 3
para el parámetro z
. Estos valores corresponden con cada parámetro en el orden en que son dados.
El programa esencialmente está realizando la siguiente operación matemática basada en los valores que pasamos a los parámetros:
a = 1 + 2
b = 1 + 3
c = 2 + 3
La función también imprime a
, b
y c
, y basado en la matemática anterior esperaríamos que a
sea igual a 3
, b
sea 4
, y c
sea 5
. Vamos a ejecutar el programa:
Output3 4 5
Cuando pasamos 1
, 2
y 3
como parámetros a la función add_numbers()
, recibimos la salida esperada.
Los parámetros son argumentos que típicamente se definen como variables dentro de las definiciones de funciones. Se les puede asignar valores cuando se ejecuta el método, pasando los argumentos a la función.
Argumentos de Palabra Clave
Además de llamar a los parámetros en orden, puedes usar argumentos de palabra clave en una llamada a función, donde el llamador identifica los argumentos por el nombre del parámetro.
Cuando se utilizan argumentos de palabra clave, se pueden usar parámetros fuera de orden porque el intérprete de Python utilizará las palabras clave proporcionadas para hacer coincidir los valores con los parámetros.
Creemos una función que nos muestre información de perfil para un usuario. Pasaremos parámetros en forma de nombre_de_usuario
(pensado como una cadena) y seguidores
(pensado como un entero).
Dentro de la declaración de la definición de función, nombre_de_usuario
y seguidores
están contenidos entre paréntesis de la función info_perfil()
. El bloque de la función imprime información sobre el usuario como cadenas, haciendo uso de los dos parámetros.
Ahora, podemos llamar a la función y asignarle parámetros:
En la primera llamada a la función, hemos llenado la información con un nombre de usuario de sammyshark
y seguidores siendo 945
, en la segunda llamada a la función utilizamos argumentos de palabras clave, asignando valores a las variables de argumento.
Ejecutemos el programa:
OutputUsername: sammyshark
Followers: 945
Username: AlexAnglerfish
Followers: 342
La salida nos muestra los nombres de usuario y números de seguidores para ambos usuarios.
Esto también nos permite modificar el orden de los parámetros, como en este ejemplo del mismo programa con una llamada diferente:
Cuando ejecutamos el programa nuevamente con el comando python profile.py
, recibiremos la siguiente salida:
OutputUsername: cameron-catfish
Followers: 820
Porque la definición de la función mantiene el mismo orden de declaraciones de print()
, si usamos argumentos de palabras clave, no importa en qué orden los pasemos a la llamada de la función.
Valores de Argumentos Predeterminados
También podemos proporcionar valores predeterminados para uno o ambos de los parámetros. Creemos un valor predeterminado para el parámetro followers
con un valor de 1
:
Ahora, podemos ejecutar la función con solo la función de nombre de usuario asignada, y el número de seguidores automáticamente se establecerá en 1 por defecto. También aún podemos cambiar el número de seguidores si lo deseamos.
Cuando ejecutamos el programa con el comando python profile.py
, recibiremos la siguiente salida:
OutputUsername: JOctopus
Followers: 1
Username: sammyshark
Followers: 945
Proporcionar parámetros predeterminados con valores nos permite omitir definir valores para cada argumento que ya tenga un valor predeterminado.
Devolver un valor
Puedes pasar un valor de parámetro a una función, y una función también puede producir un valor.
A function can produce a value with the return
statement, which will exit a function and optionally pass an expression back to the caller. If you use a return
statement with no arguments, the function will return None
.
Hasta ahora, hemos utilizado la declaración print()
en lugar de la declaración return
en nuestras funciones. Creemos un programa que en lugar de imprimir devolverá una variable.
En un nuevo archivo de texto llamado square.py
, crearemos un programa que elevará al cuadrado el parámetro x
y devolverá la variable y
. Emitimos una llamada para imprimir la variable resultado
, que se forma ejecutando la función square()
con 3
pasado como argumento.
Podemos ejecutar el programa y recibir la salida:
Output9
El entero 9
se devuelve como salida, que es lo que esperaríamos al pedirle a Python que encuentre el cuadrado de 3.
Para entender mejor cómo funciona la declaración return
, podemos comentar la declaración return
en el programa:
Ahora, volvamos a ejecutar el programa:
OutputNone
Sin usar la declaración return
aquí, el programa no puede devolver un valor, por lo que el valor por defecto es None
.
Como otro ejemplo, en el programa add_numbers.py
arriba, podríamos intercambiar la instrucción print()
por una instrucción return
.
Fuera de la función, establecemos la variable sums
igual al resultado de la función tomando 1
, 2
y 3
como hicimos anteriormente. Luego llamamos a una impresión de la variable sums
.
Ejecutemos el programa nuevamente ahora que tiene la instrucción return
:
Output(3, 4, 5)
Recibimos los mismos números 3
, 4
y 5
como salida que recibimos anteriormente usando la instrucción print()
en la función. Esta vez se entrega como una tupla porque la lista de expresiones de la instrucción return
tiene al menos una coma.
Las funciones salen inmediatamente cuando alcanzan una instrucción return
, independientemente de si están devolviendo un valor.
Usar la instrucción return
dentro del bucle for
termina la función, por lo que la línea que está fuera del bucle no se ejecutará. Si, en cambio, hubiéramos usado una instrucción break
, solo el bucle habría salido en ese momento, y se ejecutaría la última línea de print()
.
La instrucción return
sale de una función y puede devolver un valor cuando se emite con un parámetro.
Usando main()
como una Función
Aunque en Python puedes llamar a la función al final de tu programa y se ejecutará (como hemos hecho en los ejemplos anteriores), muchos lenguajes de programación (como C++ y Java) requieren una función main
para ejecutarse. Incluir una función main()
, aunque no sea obligatorio, puede estructurar nuestros programas en Python de una manera lógica que coloque los componentes más importantes del programa en una función. También puede hacer que nuestros programas sean más fáciles de leer para programadores que no son de Python.
Empezaremos agregando una función main()
al programa hello.py
anterior. Mantendremos nuestra función hello()
y luego definiremos una función main()
:
Dentro de la función main()
, incluyamos una instrucción print()
para avisarnos que estamos en la función main()
. Además, llamemos a la función hello()
dentro de la función main()
:
Finalmente, en el fondo del programa llamaremos a la función main()
:
En este punto, podemos ejecutar nuestro programa:
Recibiremos la siguiente salida:
OutputThis is the main function.
Hello, World!
Porque llamamos a la función hello()
dentro de main()
y luego solo llamamos a main()
para ejecutar, el texto Hello, World!
se imprime solo una vez, después de la cadena que nos indicó que estábamos en la función principal.
A continuación, vamos a trabajar con múltiples funciones, por lo que vale la pena revisar el ámbito de las variables globales y locales. Si defines una variable dentro de un bloque de función, solo podrás usar esa variable dentro de esa función. Si deseas usar variables entre funciones, puede ser mejor declarar una variable global.
En Python, '__main__'
es el nombre del ámbito donde se ejecutará el código de nivel superior. Cuando se ejecuta un programa desde la entrada estándar, un script o desde un indicador interactivo, su __name__
se establece igual a '__main__'
.
Debido a esto, hay una convención para usar la siguiente construcción:
Esto permite que los archivos de programa se utilicen ya sea:
- como el programa principal y ejecutar lo que sigue a la declaración
if
- como un módulo y no ejecutar lo que sigue a la declaración
if
.
Cualquier código que no esté contenido dentro de esta declaración se ejecutará al ejecutar. Si estás utilizando tu archivo de programa como un módulo, el código que no está en esta declaración también se ejecutará al importar mientras se ejecuta el archivo secundario.
Vamos a ampliar nuestro programa names.py
anterior y crear un nuevo archivo llamado more_names.py
. En este programa declararemos una variable global y modificaremos nuestra función original names()
para que las instrucciones estén en dos funciones discretas.
La primera función, has_vowel()
, verificará si la cadena name
contiene una vocal.
La segunda función, print_letters()
, imprimirá cada letra de la cadena name
.
Con esta configuración, definamos la función main()
que contendrá una llamada tanto a las funciones has_vowel()
como a print_letters()
.
Finalmente, agregaremos la construcción if __name__ == '__main__':
al final del archivo. Para nuestros propósitos, ya que hemos puesto todas las funciones que nos gustaría hacer en la función main()
, llamaremos a la función main()
después de esta declaración if
.
Ahora podemos ejecutar el programa:
El programa mostrará el mismo resultado que el programa names.py
, pero aquí el código está más organizado y puede ser utilizado de manera modular sin modificación.
Si no querías declarar una función main()
, alternativamente podrías haber terminado el programa de esta manera:
Usar main()
como una función y la declaración if __name__ == '__main__':
puede organizar tu código de una manera lógica, haciéndolo más legible y modular.
Conclusión
Las funciones son bloques de código de instrucciones que realizan acciones dentro de un programa, ayudando a que nuestro código sea reutilizable y modular.
Para obtener más información sobre cómo hacer que tu código sea más modular, puedes leer nuestra guía sobre Cómo Escribir Módulos en Python 3.
Source:
https://www.digitalocean.com/community/tutorials/how-to-define-functions-in-python-3