2009-11-11 8 views
16

Ich habe Probleme beim Ermitteln der Argumente für csv.dictreader und erkannte, dass ich keine Ahnung habe, was die eckigen Klammern bedeuten.Was bedeuten eckige Klammern "[]" in der Funktions-/Klassendokumentation?

Vom docmentation:

class csv.DictReader(csvfile[, fieldnames=None[, restkey=None[, restval=None[, dialect='excel'[, *args, **kwds]]]]]) 

ich eine Zusammenfassung der Argumente der Klasse Instanziierung schätzen würde.

Dank

+0

bezogen: [Wie API-Dokumentation zu lesen] (http://stackoverflow.com/q/10925478/1048572) – Bergi

+0

mögliche Duplikat von [Was bedeutet \ [, Element \] bedeuten?] (Http: // Stackoverflow. com/questions/17752417/what-does-element-mean) – Bergi

Antwort

14

Die eckigen Klammern zeigen an, dass diese Argumente optional sind. Sie können sie weglassen.

Also, in diesem Fall sind Sie nur erforderlich, um das csvfile Argument csv.DictReader zu übergeben. Wenn Sie einen zweiten Parameter übergeben würden, würde dies als fieldnames Argumente interpretiert werden. Die dritte wäre restkey usw.

Wenn Sie nur z. cvsfile und dialect, dann werden Sie explizit das Stichwort Argument nennen müssen, etwa so:

csv.DictReader(file('test.csv'), dialect='excel_tab') 

Weitere Informationen zu Keyword-Argumente, um python.org section 4.7.2 des Tutorials sehen.

+0

Diese Antwort ist korrekt. Es gibt nur eine Sache, die ich hinzufügen würde. Obwohl cvs.DictReader Schlüsselwortargumente verwendet, können Sie auch Nicht-Schlüsselwortargumente mit Standardwerten verwenden. Diese befinden sich normalerweise in eingebauten Funktionen, die in C geschrieben sind, wie die globale Funktion 'range()' oder die Methode 'split()' in einer Zeichenkette. Die Dokumentation 'split' an einer Schnur gibt seine Argumente wie folgt aus: s.split ([sep, [, maxsplit]]) -> Liste von Strings Sie deshalb das funktionieren würde vielleicht denken: " abcdefg ".split (maxsplit = 2) aber leider nicht. Python löst die Ausnahme "TypeError: split() akzeptiert keine Schlüsselwortargumente" aus. Seufzer. –

+0

Gibt es einen Unterschied zwischen optionalen versus Standardargumenten?Was ist der Unterschied wäre zwischen: def exampleFunc1 (arg1, [arg2 = 2], [arg3 = 3]): und def exampleFunc2 (arg1, arg2 = 2, arg3 = 3): Dank – behindalens

+0

@behindalens: in beiden Fällen können "arg2" und "arg3" weggelassen werden, in welchem ​​Fall ihr Wert "2" bzw. "3" wäre. Optionale * Argumente * können einen Standard * Wert * haben. – Stephan202

2

Normalerweise in api Dokumentation bedeuten eckige Klammern optional. Ich würde denken, dass sie das gleiche hier meinen.

1

Um zu wiederholen, was die anderen gesagt haben, sind die Argumente optional.

Wenn Sie optionale Teile auslassen, bleiben die übrigen fieldnames=, restval=, restkey= oder dialect= Schlüsselwörter sagen die Funktion, die Teile fehlen.

Die Syntax schlägt es nicht vor, aber ich wäre nicht überrascht, wenn die Schlüsselwörter die Argumente in irgendeiner Reihenfolge spezifizieren können, außer dass die letzten beiden Argumente entweder beide angegeben oder beide weggelassen werden müssen.

+0

Tatsächlich können Schlüsselwortargumente in beliebiger Reihenfolge angegeben werden. Das ist (teilweise) ihre Berufung. Auch Funktionen, die beliebig viele Schlüsselwortargumente annehmen, tun dies mit dem Parameter '** kwargs', der ein' dict' ist. Wie Sie wissen, halten "dict" -Objekte die Reihenfolge nicht aufrecht. – Stephan202

+0

@pavium: Wie wird angezeigt, dass die letzten beiden Argumente ** beide angegeben oder weggelassen werden? – behindalens

+0

Sie sind * beide * in einem einzigen Satz von Klammern. – pavium

2

Dies ist tatsächlich eine Teilmenge der weit verbreiteten Notation, um die Sprachsyntax Backus-Naur Form eindeutig zu beschreiben (siehe Wikipedia-Artikel für Details).

Verwandte Themen