Basado en esto
Un argumento posicional es un nombre que no va seguido de un signo igual (=) y un valor predeterminado.
Un argumento de palabra clave va seguido de un signo igual y una expresión que da su valor predeterminado.
def rectangleArea(width, height):
return width * height
print rectangleArea(width=1, height=2)
Pregunta > Supongo que ambos width
y height
son argumentos posicionales. Entonces, ¿por qué también podemos llamarlo con la sintaxis de argumento de palabra clave?
Respuestas:
Ese texto que cita es para la definición de la función y no tiene nada que ver con las llamadas a la función. En la llamada a esa función, estás usando la función "argumento con nombre". Ese enlace que proporciona no es de muy buena calidad, los autores parecen confundidos entre dos cosas diferentes.
La referencia de Python se refiere a argumentos posicionales y de palabras clave solo con respecto a una llamada a una función (consulte la sección
5.3.4 Calls
).Cuando hablan de la definición de una función en la sección
7.6 Function definitions
, es un término totalmente diferente "valores de parámetros predeterminados".Sospecho que las personas que crearon ese material de curso no estaban totalmente familiarizadas con Python :-)
A modo de ejemplo, consulte la siguiente definición y llamadas:
def fn (a, b, c = 1): # a/b required, c optional. return a * b + c print fn (1, 2) # returns 3, positional and default. print fn (1, 2, 3) # returns 5, positional. print fn (c = 5, b = 2, a = 2) # returns 9, named. print fn (b = 2, a = 2) # returns 5, named and default. print fn (5, c = 2, b = 1) # returns 7, positional and named. print fn (8, b = 0) # returns 1, positional, named and default.
El significado de los
=
cambios, dependiendo de si está en la definición o en la llamada.En la definición, marca el argumento como opcional y establece un valor predeterminado.
En la llamada, simplemente le permite especificar qué argumentos deben ser qué valores, en el orden que desee.
fuente
Dado que Python 3.8 introdujo solo argumentos posicionales, esta publicación necesita una actualización.
Los argumentos posicionales, los argumentos de palabras clave, los argumentos obligatorios y los opcionales a menudo se confunden. Los argumentos posicionales NO SON LOS MISMOS QUE los argumentos obligatorios. y los argumentos de palabras clave NO SON LOS MISMOS QUE los argumentos opcionales.
Argumentos posicionales son argumentos que se pueden llamar por su posición en la definición de la función.
Argumentos de palabras clave son argumentos que se pueden llamar por su nombre.
Argumentos requeridos son argumentos que se deben pasar a la función.
Los argumentos opcionales son argumentos que no se pueden pasar a la función. En python, los argumentos opcionales son argumentos que tienen un valor predeterminado .
Argumento posicional que es opcional (Python 3.8)
def f(a=2, /): pass f() # Allowed, argument is optional f(1) # Allowed, it's a positional argument f(a=1) # Error, positional only argument
Argumento posicional que se requiere (Python 3.8)
def f(a, /): pass f() # Error, argument required f(1) # Allowed, it's a positional argument f(a=1) # Error, positional only argument
Argumento de palabra clave que es opcional
def f(*, a=1): pass f() # Allowed f(1) # Error, keyword only arguments f(a=1) # Allowed, it's a keyword argument
argumento de palabra clave que se requiere
def f(*, a) pass f() # Error, argument required f(1) # Error, keyword only arguments f(a=1) # Allowed, it's a keyword argument
Argumento posicional y de palabra clave que es opcional
def f(a=1) pass f() # Allowed, argument is optional f(1) # Allowed, it's a positional argument f(a=1) # Allowed, it's a keyword argument # In fact this function is the same as def f(*, a=1, /): pass
Argumento posicional y de palabra clave que se requiere
def f(a): pass f() # Error, argument required f(1) # Allowed, it's a positional argument f(a=1) # Allowed, it's a keyword argument # In fact this function is the same as def f(*, a, /): pass
Conclusión, un argumento puede ser opcional o obligatorio, no ambos al mismo tiempo . También puede ser posicional, palabra clave o ambas al mismo tiempo .
Python 3.8 introdujo parámetros solo posicionales .
def f(positional_argument, /, positional_or_keyword_argument, *, keyword_argument): pass
fuente
f(/,a,*)
lugar def(*, a, /)
en sus dos últimos ejemplos?Un argumento de palabra clave es solo un argumento posicional con un valor predeterminado. Debe especificar todos los argumentos que no tienen un valor predeterminado. En otras palabras, los argumentos de palabras clave son solo "opcionales" porque se establecerán en su valor predeterminado si no se proporcionan específicamente.
fuente
Los argumentos posicionales se pueden llamar usando valores en orden o nombrando cada uno. Por ejemplo, los tres siguientes funcionarían de la misma manera:
def rectangleArea(width, height): return width * height print(rectangleArea(1, 2)) print(rectangleArea(width=1, height=2)) print(rectangleArea(height=2, width=1))
fuente
name=
) en una llamada de función o pasado como un valor en un diccionario precedido por**
. Estas dos definiciones contradicen su ejemplo.Argumentos posicionales: argumentos pasados a una función en el orden posicional correcto. el siguiente programa comprende los argumentos posicionales de una función
#positional arguments example def combine(str1, str2): #To join str1 and str2 with str3 str3 = str1 + str2 print(str3) #call combine() and pass 2 strings combine("Well", "come") #positional arguments
Supongamos que pasamos primero por 'ven', 'bueno' en segundo lugar, luego el resultado vendrá bien. Además, llamar a la función 3 cadenas se convierten en error.
fuente
Comprender los argumentos de palabras clave de una función.
Los argumentos de palabras clave son argumentos que identifican los parámetros por sus nombres.
#keyword arguments example: def employee(name, Id): print("Employee Name: ", name) print("Employee Id : ", Id) #call employee() and pass 2 arguments employee(name = "inban", Id = "pay001") employee(Id = "pay002", name = "karthik") #we can change the order args.
fuente
Definir parámetros y argumentos aquí podría ayudar.
Por ejemplo,
def my_function(parameter_1, parameter_2): pass my_function(argument_1, argument_2)
Ahora, cuando dice argumento posicional, está hablando de argumentos , por lo que no tiene nada que ver con la definición de la función.
width
yheight
en su ejemplo son parámetros posicionales o parámetros de palabras clave (los llamados parámetros posicionales o de palabras clave).La forma en que está llamando / pasando el valor a la función determina si son argumentos posicionales o argumentos de palabra clave .
rectangleArea(1, 2) # positional arguments rectangleArea(width=1, height=2) # keyword arguments
Lo que no mucha gente sabe es que puede especificar un parámetro solo posicional utilizando
/
en la lista de parámetros (ejemplo de aquí ).def func(positional_only1, positional_only2, /, positional_or_keyword): ...
De manera similar, también puede tener parámetros de solo palabras clave usando el
*
carácter.def func(positional_or_keyword, *, keyword_only1, keyword_only2): ...
Finalmente, también tenemos var-positional y var-keyword (también conocidos como * args y ** kwargs respectivamente). Es decir, puede tener una secuencia arbitraria de argumentos posicionales o argumentos de palabras clave pasados a la función.
fuente