9.1 Parámetros vs argumentos
Los principiantes a menudo se confunden entre los términos "parámetros" y "argumentos", pero su diferencia es importante para entender la programación funcional.
Parámetros son las variables que se enumeran en la definición de la función. Representan los nombres que la función usa para referirse a los valores que se le pasan. Los parámetros de la función sirven como "marcadores de posición" para los valores que serán usados en el cuerpo de la función. Cuando defines una función, describes sus parámetros.
def print_info(name, age): # name y age son parámetros
print(f"Name: {name}, Age: {age}")
Argumentos son los valores concretos o datos, que se pasan a la función al invocarla. Los argumentos se insertan en los lugares de los parámetros al ejecutar la función. Los argumentos pueden ser constantes, variables, expresiones o incluso resultados de otras funciones.
print_info("Alice", 30) # "Alice" y 30 son argumentos
Tipos de argumentos
- Argumentos posicionales: los valores se pasan en el orden en que los parámetros están definidos.
- Argumentos clave: argumentos que se pasan a la función usando el nombre del parámetro, lo que permite que se enumeren en cualquier orden después de los argumentos posicionales.
- Argumentos por defecto: al definir una función se pueden asignar valores predeterminados a los parámetros.
Ya estás usando argumentos posicionales, y los argumentos clave y por defecto los veremos en las siguientes lecciones.
La diferencia entre parámetros y argumentos en Python ayuda a entender cómo las funciones reciben y procesan datos. Esta diferencia es importante para crear funciones flexibles, que se puedan adaptar fácilmente a diferentes condiciones de llamada, haciendo tu código más modular y reutilizable.
9.2 Valores por defecto
Los argumentos por defecto en Python son un mecanismo que permite a las funciones especificar valores predefinidos para uno o más parámetros. Esta capacidad hace que la invocación de funciones sea más conveniente y flexible, ya que no requiere la especificación explícita de todos los argumentos cada vez que se llama a la función.
Definición de argumentos por defecto
Los argumentos por defecto se establecen en la definición de la función, donde al declarar
el parámetro se indica el valor que se usará,
si el argumento no se pasa al llamar a la función
:
def print_info(name, company='Unknown'):
print(f"Name: {name}, Company: {company}")
En este ejemplo company
tiene un valor por
defecto 'Unknown'.
- Facilitar la llamada a funciones: Las funciones con muchos parámetros pueden ser llamadas indicando solo los argumentos más importantes.
- Flexibilidad: Las funciones se pueden adaptar a diferentes escenarios sin cambiar su código.
- Legibilidad del código: La especificación clara de valores por defecto hace que el código sea autodescriptivo.
Aspectos importantes
Inmutabilidad: Los valores por defecto para los argumentos deben ser tipos de datos inmutables, como números, cadenas o tuplas. Usar tipos mutables (como listas o diccionarios) puede causar efectos secundarios no deseados debido a que las modificaciones en estos objetos se mantienen entre invocaciones de la función.
Orden de los argumentos: Los parámetros con argumentos por defecto deben seguir después de los parámetros sin argumentos por defecto en la definición de la función.
Otro ejemplo:
def create_user(username, is_admin=False):
if is_admin:
print(f"User {username} is an admin.")
else:
print(f"User {username} is a regular user.")
create_user("Alice") # is_admin == False
create_user("Bob", is_admin=True) # is_admin == True
create_user("Karl", True) # is_admin == True
Arriba se muestran 3 formas de llamar a la función con un argumento por defecto: todas ellas funcionan.
9.3 Paso de parámetros por nombre
El paso de parámetros a una función por nombre permite indicar más claramente qué valores se pasan a qué argumentos, mejorando la legibilidad del código y disminuyendo la probabilidad de errores relacionados con el orden incorrecto de los argumentos.
Para pasar el valor de un parámetro por nombre, al llamar a la función debes asignar un valor al parámetro específico:
función(parámetro1 = valor, parámetro2 = valor)
Este método es especialmente útil al trabajar con funciones que tienen muchos parámetros o parámetros con valores por defecto.
Ventajas del paso de parámetros por nombre
- Claridad y legibilidad: Indicar el nombre del parámetro al invocarlo hace que el código sea más fácil de entender para otros desarrolladores o al regresar a tu propio código antiguo.
- Flexibilidad: Los parámetros pueden ser pasados en cualquier orden, lo cual es conveniente cuando una función tiene muchos parámetros.
- Evitar errores: No es necesario recordar el orden de los parámetros de la función, lo que disminuye la probabilidad de errores relacionados con la transmisión incorrecta de valores.
Ejemplos de uso
def create_profile(name, age, job):
print(f"Name: {name}")
print(f"Age: {age}")
print(f"Job: {job}")
create_profile(name = "John", age = 28, job = "Developer")
En este ejemplo los parámetros no se pasan en orden, pero a cada uno de ellos se le asigna explícitamente un valor, lo que hace que la llamada a la función sea más flexible y clara.
Ejemplo 2:
Por cierto, ya te has encontrado con el paso de parámetros por nombre. En
la función print()
, ¿recuerdas?
Características y limitaciones
Los parámetros pasados por nombre deben seguir después de los parámetros sin nombre, si los hay en la definición de la función.
No se puede usar el mismo nombre de parámetro más de una vez al llamar a la función.
El paso de parámetros por nombre es una poderosa característica de Python que hace que el código sea más seguro y comprensible, especialmente en casos de uso de funciones con muchos argumentos o valores opcionales.
GO TO FULL VERSION