En Python, puede definir una función que tenga un número variable de argumentos. En este artículo, aprenderá a definir dichas funciones usando argumentos predeterminados, palabras clave y arbitrarios.
Vídeo: Argumentos de la función Python: posicional, palabras clave y predeterminado
Argumentos
En el tema de la función definida por el usuario, aprendimos cómo definir una función y llamarla. De lo contrario, la llamada a la función resultará en un error. Aquí hay un ejemplo.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Salida
Hola Monica, buenos dias!
Aquí, la función greet()
tiene dos parámetros.
Como hemos llamado a esta función con dos argumentos, se ejecuta sin problemas y no obtenemos ningún error.
Si lo llamamos con un número diferente de argumentos, el intérprete mostrará un mensaje de error. A continuación se muestra una llamada a esta función con uno y sin argumentos junto con sus respectivos mensajes de error.
>>> greet ("Monica") # solo un argumento TypeError: greet () falta 1 argumento posicional requerido: 'msg'
>>> saludar () # sin argumentos TypeError: saludar () faltan 2 argumentos posicionales obligatorios: 'nombre' y 'msg'
Argumentos de funciones variables
Hasta ahora, las funciones tenían un número fijo de argumentos. En Python, hay otras formas de definir una función que puede tomar un número variable de argumentos.
A continuación se describen tres formas diferentes de este tipo.
Argumentos predeterminados de Python
Los argumentos de función pueden tener valores predeterminados en Python.
Podemos proporcionar un valor predeterminado a un argumento usando el operador de asignación (=). Aquí hay un ejemplo.
def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message. If the message is not provided, it defaults to "Good morning!" """ print("Hello", name + ', ' + msg) greet("Kate") greet("Bruce", "How do you do?")
Salida
¡Hola Kate, buenos días! Hola Bruce, ¿cómo estás?
En esta función, el parámetro name
no tiene un valor predeterminado y es obligatorio (obligatorio) durante una llamada.
Por otro lado, el parámetro msg
tiene un valor predeterminado de "Good morning!"
. Entonces, es opcional durante una llamada. Si se proporciona un valor, sobrescribirá el valor predeterminado.
Cualquier número de argumentos en una función puede tener un valor predeterminado. Pero una vez que tenemos un argumento predeterminado, todos los argumentos a su derecha también deben tener valores predeterminados.
Esto significa que los argumentos no predeterminados no pueden seguir los argumentos predeterminados. Por ejemplo, si hubiéramos definido el encabezado de la función anterior como:
def greet (msg = "¡Buenos días!", nombre):
Obtendríamos un error como:
SyntaxError: el argumento no predeterminado sigue al argumento predeterminado
Argumentos de palabras clave de Python
Cuando llamamos a una función con algunos valores, estos valores se asignan a los argumentos según su posición.
Por ejemplo, en la función anterior greet()
, cuando la llamamos como greet("Bruce", "How do you do?")
, el valor "Bruce"
se asigna al nombre del argumento y de manera similar "How do you do?"
a msg.
Python permite que se invoquen funciones utilizando argumentos de palabras clave. Cuando llamamos a funciones de esta manera, el orden (posición) de los argumentos se puede cambiar. Las siguientes llamadas a la función anterior son todas válidas y producen el mismo resultado.
# 2 keyword arguments greet(name = "Bruce",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Bruce") 1 positional, 1 keyword argument greet("Bruce", msg = "How do you do?")
As we can see, we can mix positional arguments with keyword arguments during a function call. But we must keep in mind that keyword arguments must follow positional arguments.
Having a positional argument after keyword arguments will result in errors. For example, the function call as follows:
greet(name="Bruce","How do you do?")
Will result in an error:
SyntaxError: non-keyword arg after keyword arg
Python Arbitrary Arguments
Sometimes, we do not know in advance the number of arguments that will be passed into a function. Python allows us to handle this kind of situation through function calls with an arbitrary number of arguments.
In the function definition, we use an asterisk (*) before the parameter name to denote this kind of argument. Here is an example.
def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John")
Output
Hello Monica Hello Luke Hello Steve Hello John
Aquí, hemos llamado a la función con múltiples argumentos. Estos argumentos se envuelven en una tupla antes de pasar a la función. Dentro de la función, usamos un for
bucle para recuperar todos los argumentos.