2016-03-19 19 views
5

È completamente possibile che questa domanda sia un duplicato, ma non so come si chiama questo concetto, quindi non so nemmeno come cercare esso.Nome e ragione dei parametri della funzione Python di tipo `nome = valore`

Sono nuovo di Python e cercando di capire questa funzione da un Caffe example:

def conv_relu(bottom, ks, nout, stride=1, pad=0, group=1): 
    conv = L.Convolution(bottom, kernel_size=ks, stride=stride, 
           num_output=nout, pad=pad, group=group) 
    return conv, L.ReLU(conv, in_place=True) 

ho calcolato i parametri stride=1, pad=1, ecc nella definizione della funzione conv_relu sono valori iniziali di default, ma allora che cosa fare kernel_size=ks, stride=stride, ecc. Nel mezzo di chiamata L.Convolution? È un po 'come una coppia nome/valore?

Se non altro, qualcuno può dirmi per favore come si chiama?

+3

Sono chiamati argomenti di parole chiave. –

+2

Ti raccomando di leggere il tutorial di Python; [questo e molte altre cose sono spiegate lì] (https://docs.python.org/3/tutorial/controlflow.html#keyword-arguments) –

+0

@AnttiHaapala: non è una cattiva idea. Mi sono fatto strada attraverso di esso, ma frammentario se necessario – marcman

risposta

6

Questi sono argomenti della parola chiave.

some_function(x=y, z=zz) 

x è il nome del parametro in cui è stata dichiarata la funzione, e y è il valore che viene passata in

Motivi per utilizzare argomenti chiave:.

  • Si può dare loro in qualsiasi ordine, anziché solo l'ordine nella definizione di funzione
  • Quando si guarda indietro sul codice in seguito, se i parametri hanno nomi validi, è possibile indicare immediatamente lo scopo del passato le variabili invece di dover controllare la definizione della funzione o la documentazione per vedere cosa significano i dati.
5

Hai un call expression utilizzando argomenti chiave. Ogni coppia name=value assegna un valore a un parametro specifico che la funzione accetta.

Gli argomenti della parola chiave possono essere utilizzati in qualsiasi ordine. Se il parametro denominato nella firma della funzione ha un valore predefinito, il valore nella chiamata sostituisce quello predefinito. Se ometti un argomento specifico, viene utilizzato il valore predefinito.

4

In Python, gli argomenti possono essere forniti per posizione o per parola chiave.

Per esempio, supponiamo di avere la seguente funzione:

def foo(bar, baz=1, qux=2): 
    pass 

Si può chiamare come foo(3), così nel campo di applicazione callee, bar sarebbe 3. baz e qux verranno assegnati i loro valori predefiniti - 1 e 2, rispettivamente - in modo da non doverli fornire esplicitamente.

È anche possibile chiamare questa funzione utilizzando gli argomenti della parola chiave (è il termine che si stava cercando). La stessa identica chiamata con bar come argomento con nome sarebbe foo(bar=3).

Ovviamente, preferiremmo semplicemente utilizzare foo(3) poiché è più conciso, a meno che non vi siano ragioni specifiche per utilizzare argomenti con nome.Un esempio di tale motivazione è se si desidera fornire un argomento non predefinito per qux, lasciando invariato l'argomento predefinito per baz: foo(3, qux=4).

+1

La documentazione Python chiama questi argomenti * keyword *, non gli argomenti con nome. –

+0

Giuro che un'altra lingua usa il termine "named". Penso che sia da lì che viene la confusione. – Carcigenicate

+0

@MartijnPieters: grazie, ho corretto la mia risposta. Per quello che vale, "argomenti con nome" era il termine usato da Dive Into Python: http://www.diveintopython.net/power_of_introspection/optional_arguments.html –