2016-03-19 2 views
5

Es ist durchaus möglich, dass diese Frage ein Duplikat ist, aber ich weiß nicht, was dieses Konzept so genannt wird, ich weiß nicht einmal, wie zu suchen es.Name und Grund für die Python-Funktion Parameter vom Typ `namen = value`

Ich bin neu in Python und zu versuchen, diese Funktion von einem Caffe example zu verstehen:

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) 

Ich dachte, die Parameter stride=1, pad=1, usw. in der conv_relu Funktionsdefinition sind Standardanfangswerte, aber dann, was zu tun kernel_size=ks, stride=stride, usw. in der L.Convolution Anruf bedeuten? Ist es ein bisschen wie ein Name/Wert-Paar?

Wenn nichts anderes, kann mir bitte jemand sagen, wie das heißt?

+3

Sie werden Keyword-Argumente genannt. –

+2

Ich empfehle, dass Sie das Python-Tutorial lesen; [dies und viele andere Dinge werden dort erklärt] (https://docs.python.org/3/tutorial/controlflow.html#keyword-arguments) –

+0

@AnttiHaapala: Keine schlechte Idee. Ich habe meinen Weg durch, aber Stück für Stück gemacht – marcman

Antwort

6

Das sind Schlüsselwortargumente.

some_function(x=y, z=zz) 

x ist der Name des Parameters, wenn die Funktion deklariert wurde, und y ist der Wert, der in übergeben wird wird

Gründe Stichwort Argumente zu verwenden:.

  • Sie können sie geben In jeder Reihenfolge, anstatt nur die Reihenfolge in der Funktionsdefinition
  • Wenn Sie später auf den Code zurückblicken, wenn die Parameter gute Namen haben, können Sie sofort den Zweck der übergebene Variablen, anstatt die Funktionsdefinition oder Dokumentation zu überprüfen, um zu sehen, was die Daten bedeuten.
5

Sie haben ein call expression mit Schlüsselwort Argumente. Jedes name=value-Paar weist einem bestimmten Parameter, den die Funktion annimmt, einen Wert zu.

Schlüsselwortargumente können in beliebiger Reihenfolge verwendet werden. Wenn der benannte Parameter in der Funktionssignatur einen Standardwert hat, überschreibt der Wert im Aufruf diesen Standardwert. Wenn Sie ein bestimmtes Argument weglassen, wird der Standardwert verwendet.

4

In Python können Argumente nach Position oder nach Schlüsselwort angegeben werden.

Zum Beispiel, sagen Sie die folgende Funktion haben:

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

Sie können es als foo(3) nennen, so in dem Angerufenen Umfang, würde bar3 sein. baz und qux werden ihre Standardwerte zugewiesen - 1 und 2, so dass Sie sie nicht explizit angeben müssen.

Sie können diese Funktion auch mit Schlüsselwortargumente aufrufen (das ist der Begriff, nach dem Sie gesucht haben). Der gleiche Anruf mit bar als benanntes Argument wäre foo(bar=3).

Natürlich würden wir lieber foo(3) verwenden, da es prägnanter ist, es sei denn, es gibt bestimmte Gründe, benannte Argumente zu verwenden.Ein Beispiel für einen solchen Grund ist, wenn wir ein nicht standardmäßiges Argument für qux bereitstellen möchten, während das Standardargument für baz unverändert gelassen wird: foo(3, qux=4).

+1

Die Python-Dokumentation ruft diese * Schlüsselwort * Argumente auf, nicht benannte Argumente. –

+0

Ich schwöre eine andere Sprache verwendet den Begriff "benannt". Ich denke, da kommt die Verwirrung her. – Carcigenicate

+0

@MartijnPieters: Danke, ich habe meine Antwort korrigiert. Für das, was es wert ist, wurde "Benannte Argumente" von Dive Into Python verwendet: http://www.diveintopython.net/power_of_introspection/optional_arguments.html –