Argumentos solo posicionales

A medida que sigues explorando Python, te encontrarás con el concepto de argumentos de función. En Python, hay diferentes formas de pasar argumentos a una función. Podemos tener argumentos predeterminados, argumentos de palabra clave y argumentos posicionales. Pero existe un tipo específico de argumento que solo puede proporcionarse por posición y no por palabra clave, conocido como argumentos solo posicionales.
A partir de Python 3.8, existe una sintaxis especial / en las definiciones de funciones para indicar que algunos argumentos son solo posicionales. Los argumentos solo posicionales aparecen antes de un / en la definición de la función.
Considera esta función que suma tres números:
def add_numbers(a, b, c):
    return a + b + c
Podemos llamar a esta función proporcionando los argumentos en el orden en que están definidos, es decir, por posición:
print(add_numbers(10, 20, 30))
# outputs: 60
Y también podemos llamarla usando los nombres de los argumentos, es decir, por palabra clave:
print(add_numbers(a=10, b=20, c=30))
# outputs: 60
Pero, ¿qué pasa si queremos asegurarnos de que algunos argumentos siempre se proporcionen en un orden específico? Ahí es donde entran en juego los argumentos solo posicionales. Vamos a modificar la función add_numbers para hacer que a y b sean solo posicionales:
def add_numbers(a, b, /, c):
    return a + b + c
Ahora podemos seguir llamando a esta función con argumentos por posición:
print(add_numbers(10, 20, 30))         # 60
print(add_numbers(a=10, b=20, c=30))   # TypeError
print(add_numbers(10, 20, c=30))       # 60
Sin embargo, si intentamos llamarla con los argumentos solo posicionales como argumentos de palabra clave, obtendremos un TypeError. En este caso, debemos proporcionar a y b por posición. El argumento c puede ser suministrado ya sea por posición o por palabra clave:
 
Entonces, la sintaxis para los argumentos solo posicionales es:
  1. Los argumentos solo posicionales vienen antes de un / en la definición de la función.
  1. Si / está presente en la definición de la función, los argumentos antes de él son solo posicionales.
  1. Los argumentos solo posicionales no pueden pasarse por palabra clave.
  1. Los argumentos después de / pueden pasarse por posición o por palabra clave.
¿Existen funciones incorporadas en Python que tengan argumentos solo posicionales?
Sí, muchas funciones incorporadas en Python tienen argumentos solo posicionales. La función abs(), por ejemplo, es un buen ejemplo:
help(abs)
# Help on built-in function abs in module builtins:
# abs(x, /)
#     Return the absolute value of the argument.

abs(-6)    # 6
abs(x=-6)  # TypeError: abs() takes no keyword arguments
El parámetro x en abs es un argumento solo posicional, y cuando intentamos pasarlo a la función como un argumento de palabra clave, el programa lanza un TypeError.
 
To check your solution you need to sign in
Sign in to continue