2016-08-09 36 views
1

ich durch das Komma in einer Funktion Parameterliste bin ratlos:Python: Hinter Komma nach einem catch-all Argumente

def f(*args,): pass 

verdient mir eine SyntaxError Ausnahme. In Python 3, selbst das:

def f(*, arg = 1,): pass 

löst eine Ausnahme Syntaxfehler. Beide zeigen auf die geschlossene Klammer.

Entfernen Sie das abschließende Komma, alles ist ruhig. Ich kratze meinen Kopf auf https://docs.python.org/3/reference/compound_stmts.html#function-definitions aber es ist irgendwie jenseits von mir (und möglicherweise auch falsch ... zumindest, in meinem Browser-Rendering kann ich nicht die letzte schließende Klammer in der parameter_list Definition paaren). Mache ich etwas falsch? Ich bin die

def f(*, 
     a: "doc A" = 1, 
     b: "doc B" = 2, 
     c: "doc C" = 3, 
     d: "doc D" = 4, 
     # ... and maybe more, 
    ) 

Art von Person, und diese Frage Art-of ärgert mich (vielleicht, dass der falsche Teil ist, und ich soll die , a: "doc A" = 1 Art von Person werden - aber es sieht mir komisch).

Verwenden von Python wie in Gentoo Ebuilds dev-lang/Python 2.7.12 und 3.5.2 (von http://www.python.org) verteilt.

+2

Warum wollen Sie ein Komma am Ende, wenn Sie keine funktionalen Argumente mehr haben? –

+1

@be_good_do_good: Das nachgestellte Komma erleichtert es, die Argumente neu anzuordnen oder neue hinzuzufügen. Es geht um die Bearbeitung von Komfort und Wartungsfreundlichkeit. Hinsichtlich der Funktionalität gibt es natürlich keinen Unterschied. – Hamlet

+0

@be_good_do_good: Für Konsistenz und kleinere Version Diffs beim Hinzufügen/Entfernen/Umordnen von Zeilen. Sie werden von vielen Style Guides unterstützt, einschließlich PEP8, wenn ich mich richtig erinnere. – bluenote10

Antwort

-2

Nachgestellte Kommas in Parameterlisten werden als mehrere Werte behandelt, die durch Kommata getrennt sind.

a = (4) 
type (a) 

>> output: int 


a = (4,) 
type (a) 

>> output: tuple 

Also, wenn die Parameter einer Funktion ein Komma haben, denkt Python, dass es ein Wert sein soll, aber es ist nicht, so dass es wirft einen Syntaxfehler.

Hintereinander Kommas in Listen, auf der anderen Seite, sind in Ordnung.

list1 = [ 0, 1, 2, 3, ] 

>> totally fine 
+0

Nun, 'del f (a,): pass 'ist auch völlig in Ordnung. – Hamlet

+0

Das OP fragt nach Kommas in Funktion _definitions_, nicht in aufrufenden Sequenzen. – martineau