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:
- Los argumentos solo posicionales vienen antes de un
/
en la definición de la función.
- Si
/
está presente en la definición de la función, los argumentos antes de él son solo posicionales.
- Los argumentos solo posicionales no pueden pasarse por palabra clave.
- 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
.