English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
EnFunción definida por el usuarioEn el artículo, aprendimos sobre la definición de funciones y la invocación de funciones. Si no está claro el modo de invocación de las funciones, se producirán errores inesperados. A continuación se muestra un ejemplo.
def greet(name, msg): """Esta es una función de saludo" Tiene dos parámetros "name", "msg" print("¡Hola", name + ', '' + msg) greet("Monica", "¡Buenos días!")
Resultado de salida
¡Hola Monica, ¡Buenos días!
La función greet() tiene dos parámetros.
Dado que ya hemos llamado a esta función con dos parámetros, la función se ejecuta normalmente y no hay errores.
Si se llama con diferentes cantidades de parámetros, el intérprete mostrará un mensaje de error. A continuación se muestra el llamado a esta función, que ilustra el uso de un solo parámetro y el uso de sin parámetros, y los mensajes de error que arrojan después de ejecutarse.
>>> greet("Monica") # Se ha proporcionado un solo parámetro TypeError: greet() falta 1 argumento posicionales requerido: 'msg'
>>> greet() # No se han introducido parámetros TypeError: greet() falta 2 argumentos posicionales requeridos: 'name' y 'msg'
Hasta ahora, la función tiene una cantidad fija de parámetros. En Python, hay otros métodos para definir funciones que pueden usar una cantidad variable de parámetros.
A continuación, se presentan tres formas diferentes de este tipo.
En Python, los parámetros de una función pueden tener un valor por defecto.
Podemos usar el operador de asignación (=) para proporcionar un valor por defecto para los parámetros. Este es un ejemplo.
def greet(name, msg = "Buenos días!"): """ Esta función saluda a la persona que proporciona el mensaje. si no se proporciona un mensaje, se establece por defecto como "Buenos días!" """ print("Hola", name + ', '' + msg) greet("Zhang San") greet("Li Si", "¿cómo estás últimamente?")
Resultado de salida
Hola, Zhang San, buenos días! Hola, Li Si, ¿cómo estás últimamente?
En esta función, el parámetro name no tiene un valor por defecto, por lo que el parámetro name debe proporcionarse al llamar a esta función (obligatorio).
Por otro lado, el valor por defecto del parámetro msg es "Buenos días!". Por lo tanto, no es necesario proporcionar un valor al llamar a la función. Si se proporciona un valor, reemplazará el valor por defecto.
Cualquier número de parámetros en una función puede tener un valor por defecto. Pero una vez que hay un valor por defecto, todos los parámetros a la derecha también deben tener un valor por defecto.
Esto significa que los parámetros no por defecto no pueden seguir a los parámetros por defecto. Por ejemplo, si definimos la cabecera de la función superior como:
def greet(msg = "Buenos días!", name):
Recibiremos el siguiente mensaje de error:
SyntaxError: non-el argumento por defecto sigue al argumento por defecto
Cuando llamamos a una función con ciertos valores, estos valores se asignan a los parámetros según su posición.
Por ejemplo, en la función greet() superior, cuando la llamamos greet("Bruce", "¿Cómo estás?") el valor "Bruce" se asigna al parámetronameY "¿Cómo estás?" ha sido asignado a msg.
Python permite llamar a funciones utilizando parámetros nombrados. Cuando llamamos a la función de esta manera, se puede cambiar el orden de los parámetros (posición). Todas las llamadas posteriores a la función son válidas y producen el mismo resultado.
# 2parámetros greet(name = "Bruce",msg = "How do you do?") # 2parámetros, cambia el orden de los parámetros greet(msg = "How do you do?",name = "Bruce") #1 parámetros 1 parámetros greet("Bruce", msg = "How do you do?")
Como hemos visto, podemos mezclar parámetros posicionales y nombrados durante la llamada a la función. Pero debemos recordar que los parámetros nombrados deben seguir a los parámetros posicionales.
Colocar parámetros posicionales después de parámetros nombrados causará un error. Por ejemplo, la llamada a la función es como sigue:
greet(name="Bruce","How do you do?")
causará un error:
SyntaxError: non-keyword arg after keyword arg
A veces, no sabemos cuántos parámetros se pasarán a la función. Python nos permite manejar esta situación mediante llamadas a funciones con un número ilimitado de parámetros.
En la definición de la función, utilizamos un asterisco (*)representa este tipo de parámetros. Este es un ejemplo.
def greet(*names): """Los objetos saludados por esta función son Las personas en la lista de tuplas.""" # El nombre es una tupla con parámetros for name in names: print("Hola", name) greet("Monica", "Luke", "Steve", "John")
Resultado de salida
Hola Monica Hola Luke Hola Steve Hola John
Aquí, hemos llamado a una función con varios parámetros. Estos parámetros se encapsulan en un tupla antes de ser pasados a la función. Dentro de la función, utilizamos un bucle for para recuperar todos los parámetros.