2012-02-26 20 views
33

Basado en thisargumento posicional v.s. argumento de palabra clave

Un argumento posicional es un nombre que no es seguido por un signo de igual (=) y el valor predeterminado.

Un argumento de palabra clave es seguido por 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> I suponer que tanto width y height son argumentos posicionales. Entonces, ¿por qué también podemos llamarlo con sintaxis de argumento real de palabra clave?

+0

"¿por qué también podemos llamarlo con sintaxis de argumento real de palabra clave?" Porque esa es la forma en que funciona el lenguaje. –

Respuesta

68

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 el llame al a esa función, está usando la función "argumento nombrado". Ese enlace que proporcionas no es de muy buena calidad, los autores parecen confundidos entre dos cosas diferentes.

La referencia de Python se refiere a los argumentos posicionales y de palabra clave solo con respecto a una llamada a una función (ver section 5.3.4 Calls).

Cuando hablan sobre la definición de una función en section 7.6 Function definitions, es un término totalmente diferente "valores de parámetros predeterminados".

Sospecho que la gente que pone juntos que por supuesto-ware no eran totalmente familiarizado con Python :-)


A modo de ejemplo, consulte la siguiente definición y pide:

def fn (a, b, c = 1): 
    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 = cambia, dependiendo de si está en la definición o en la llamada.

En la definición, marca el argumento opcional y establece un valor predeterminado.

En la llamada, simplemente le permite especificar qué argumentos deben ser los valores, en el orden que desee.

3

Los argumentos de posición se pueden invocar utilizando valores en orden o nombrando cada uno. Por ejemplo, las tres opciones 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)) 
6

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 palabra clave son solo "opcionales" porque se establecerán en su valor predeterminado si no se suministran específicamente.

Cuestiones relacionadas