2012-02-26 15 views
33

Sulla base thisArgomento posizionale v.s. argomento chiave

Un argomento posizionale è un nome che non è seguito da un segno di uguale (=) e il valore predefinito.

Un argomento parola chiave è seguito da un segno di uguale e un'espressione che fornisce il suo valore predefinito.

def rectangleArea(width, height): 
    return width * height 

print rectangleArea(width=1, height=2) 

Domanda> Presumo che sia width e height sono argomenti posizionali. Allora perché possiamo anche chiamarlo con la sintassi della parola chiave real argument?

+0

"perché possiamo anche chiamarlo con la sintassi della parola chiave true argument?" Perché è così che funziona la lingua. –

risposta

68

Quel testo che si cita è per la definizione della funzione e non ha nulla a che fare con le chiamate alla funzione. Nella chiamata alla funzione, si utilizza la funzione "argomento denominato". Quel link che fornisci non è di ottima qualità, gli autori sembrano confusi tra due cose diverse.

Il riferimento Python si riferisce agli argomenti posizionali e parola chiave solo rispetto a una chiamata a una funzione (vedere section 5.3.4 Calls).

Quando si parla della definizione di una funzione in section 7.6 Function definitions, è un termine completamente diverso "valori di parametro predefiniti".

ho il sospetto le persone che hanno messo insieme quel corso-ware non erano del tutto familiarità con Python :-)


A titolo di esempio, fare riferimento alla seguente definizione e chiede:

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. 

Il significato di = cambia, a seconda che si tratti della definizione o della chiamata.

Nella definizione, contrassegna l'argomento facoltativo e imposta un valore predefinito.

Nella chiamata, consente semplicemente di specificare quali argomenti devono essere i valori, in qualsiasi ordine si desideri.

3

Gli argomenti di posizione possono essere chiamati utilizzando valori in ordine o nominandoli ciascuno. Ad esempio, tutti e tre i seguenti potrebbero funzionare allo stesso modo:

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 argomento di parola chiave è solo un argomento posizionale con un valore predefinito. È necessario specificare tutti gli argomenti che non hanno un valore predefinito. In altre parole, gli argomenti delle parole chiave sono solo "facoltativi" perché saranno impostati sul loro valore predefinito se non specificatamente forniti.

Problemi correlati