Argumentos predeterminados en las funciones de Python

El artículo explica la diferencia entre los argumentos normales y los argumentos predeterminados en las funciones de Python con la ayuda de diferentes ejemplos.

Las funciones en Python se utilizan para implementar la lógica que desea ejecutar repetidamente en diferentes lugares de su código. Puede pasar datos a estas funciones a través de argumentos de función. Además de pasar argumentos a las funciones a través de una llamada de función, también puede establecer valores de argumento predeterminados en las funciones de Python. Estos valores predeterminados se asignan a los argumentos de la función si no pasa explícitamente un valor de parámetro al argumento dado. Los parámetros son los valores que realmente se pasan a los argumentos de la función.

En este artículo, verá cómo usar los argumentos predeterminados en las funciones de Python. Pero primero, veremos cómo definir una función en Python y cómo pasar valores explícitamente a los argumentos de la función.

Función sin argumentos

Definamos una función de Python muy simple sin ningún argumento:

1
2
def my_function():
    print("This is a function without arguments")

El script anterior define una función, my_function, que no acepta ningún argumento y simplemente imprime una cadena.

El siguiente script muestra cómo llamarías realmente a la función my_function():

1
my_function()

En la salida, debería ver una declaración simple impresa en la pantalla por la función my_function():

1
This is a function without arguments

Función con argumentos explícitos

Ahora definamos una función de Python simple donde tenemos que pasar múltiples valores para los argumentos de la función. Si no especifica valores para todos los argumentos de la función, verá un error.

Aquí está la función que usaremos como ejemplo:

1
2
3
def func_args(integer1, integer2):
    result = integer1 + integer2
    return result

En el código anterior creamos una función, func_args(), con dos argumentos integer1 y integer2. La función suma los valores pasados ​​en los dos argumentos y devuelve el resultado a la persona que llama a la función.

Intentemos llamar a la función anterior con dos argumentos:

1
2
result = func_args(10, 20)
print(result)

El script anterior llama al método func_args() con dos valores de parámetro, es decir, 10 y 20. En el resultado, debería ver la suma de estos dos valores, es decir, 30.

Intentemos ahora llamar al método func_args() sin pasar valores para los argumentos:

1
2
result = func_args()
print(result)

En la salida, debería ver el siguiente error:

1
2
3
4
5
6
7
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-13-3449c8e5e188> in <module>
----> 1 result = func_args()
      2 print(result)

TypeError: func_args() missing 2 required positional arguments: 'integer1' and 'integer2'

El error es bastante claro, a la llamada de función a func_args() le faltan los 2 argumentos posicionales requeridos, integer1 y integer2. El error básicamente nos dice que necesitamos pasar valores para los argumentos integer1 y integer2 a través de la llamada a la función.

Pasemos ahora un valor para uno de los argumentos y veamos qué sucede:

1
2
result = func_args(10)
print(result)

Ahora, en la salida, debería volver a ver el siguiente error:

1
2
3
4
5
6
7
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-640ec7b786e1> in <module>
----> 1 result = func_args(10)
      2 print(result)

TypeError: func_args() missing 1 required positional argument: 'integer2'

La diferencia aquí es que el error ahora nos dice que falta el valor de uno de los argumentos posicionales, es decir, entero2. Esto significa que sin ningún valor de argumento predeterminado establecido, debe pasar valores explícitamente para todos los argumentos de la función; de lo contrario, se generará un error.

¿Qué sucede si desea que su función se ejecute con o sin los valores de los argumentos en la llamada a la función? Aquí es donde entran en juego los argumentos predeterminados en las funciones de Python.

Función con argumentos predeterminados

Los argumentos predeterminados en las funciones de Python son aquellos argumentos que toman valores predeterminados si no se pasan valores explícitos a estos argumentos desde la llamada a la función. Definamos una función con un argumento predeterminado.

1
2
3
def find_square(integer1=2):
    result = integer1 * integer1
    return result

El script anterior define una función find_square() con un argumento predeterminado, es decir, integer1. El valor predeterminado para el argumento integer1 se establece en 2. Si llama al método find_square() con un valor para el argumento integer1, la función find_square() devolverá el cuadrado de ese valor.

De lo contrario, si no pasa ningún valor para el argumento entero1 de la función find_square(), verá que el valor predeterminado, es decir, 2, se asignará a entero1, y la función devolverá el cuadrado de 2, es decir, 4.

Llamemos primero al método find_square() con el valor de argumento de 10:

1
2
result = find_square(10)
print(result)

Producción:

1
100

Cuando ejecuta el script anterior, el valor 10 sobrescribe el valor predeterminado de 2 para el argumento integer1 de la función find_square() y la función devuelve 100, que es el cuadrado de 10.

Ahora llamaremos a la función find_square() sin ningún valor para el argumento argument1. En este caso, verá que la función find_square() devolverá 4 ya que, en ausencia del valor para la función find_square(), el valor predeterminado de 2 se usará como valor para find_square () función, como se muestra a continuación:

1
2
result = find_square()
print(result)

Producción:

1
4

Una función de Python también puede tener múltiples argumentos predeterminados. Por ejemplo, en el siguiente script, la función agrega el número entero pasado a los argumentos. Si ninguno de los valores enteros se pasa a la función, los argumentos predeterminados tomarían los valores 2 y 4 respectivamente, como se muestra a continuación:

1
2
3
def add_ints(integer1=2, integer2=4):
    result = integer1 + integer2
    return result

Llamemos primero a la función add_ints() sin ningún parámetro:

1
2
result = add_ints()
print(result)

Producción:

1
6

Dado que no pasamos ningún valor para los argumentos de la función, los valores de los argumentos predeterminados, es decir, 2 y 4, se han sumado.

Pasemos ahora dos de nuestros propios valores a la función add_ints():

1
2
result = add_ints(4, 8)
print(result)

Producción:

1
12

Como era de esperar, se sumaron 4 y 8 para obtener 12.

Una función de Python puede tener argumentos normales (explícitos) y predeterminados al mismo tiempo. Vamos a crear una función take_power(). El primer argumento de la función es un argumento normal, mientras que el segundo argumento es un argumento predeterminado con un valor de 2. La función devuelve el resultado del valor del primer argumento elevado a la potencia del valor del segundo argumento.

1
2
3
4
5
6
def take_power(integer1, integer2=2):
    result = 1
    for i in range(integer2):
        result = result * integer1

    return result

Primero pasemos un único argumento:

1
2
result = take_power(3)
print(result)

Producción:

1
9

En el script anterior, se ha pasado 3 como valor al argumento integer1 de la función take_power(). No se ha proporcionado ningún valor para el argumento predeterminado entero2. Por lo tanto, el valor predeterminado de 2 se usará para tomar la potencia de 3 y verá 9 en la salida.

Pasemos ahora dos valores a la función take_power().

1
2
result = take_power(3, 4)
print(result)

En el resultado, verás 3 elevado a la cuarta potencia, es decir, 81.

Es importante tener en cuenta que los parámetros con argumentos predeterminados no pueden ir seguidos de parámetros sin argumento predeterminado. Tome la siguiente función, por ejemplo:

1
2
3
4
5
6
def take_power(integer1=2, integer2):
    result = 1
    for i in range(integer2):
        result = result * integer1

    return result

Intentar llamar a esta función dará como resultado un error ya que el primer argumento tiene un valor predeterminado, pero el segundo no:

1
2
result = take_power(3, 4)
print(result)

La ejecución de este código da como resultado el siguiente error:

1
2
3
4
5
6
7
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-640ec7b786e1> in <module>
----> 1 def take_power(integer1=3, integer2):
      2     result = 1

SyntaxError: non-default argument follows default argument
Licensed under CC BY-NC-SA 4.0