Ich dachte, ich könnte benannte Parameter nach Positionsparametern variabler Länge in einem Funktionsaufruf in Python 2 verwenden, aber SyntaxError
beim Importieren einer Python-Klasse erhalte ich eine . Ich schreibe zum Beispiel mit der folgenden "get" -Methode:
class Foo(object):
def __init__(self):
print "You have created a Foo."
def get(self, *args, raw=False, vars=None):
print len(args)
print raw
print vars
Der Fehler sieht aus wie:
def get(self, *args, raw=False, vars=None):
^
SyntaxError: invalid syntax
Ich möchte die Methode auf verschiedene Arten aufrufen können:
f = Foo()
f.get(arg1, arg2)
f.get(arg1, raw=True)
f.get(arg1, arg2, raw=True, vars=something)
etc.
Die Python-Syntax erlaubt keine variablen Argumente in Funktions- und Schlüsselwortargumenten mit gleichzeitigem Standardwert. Wenn Sie Schlüsselwortargumente zusammen mit einer beliebigen Anzahl von Positionsargumenten haben müssen, müssen Sie auch eine beliebige Anzahl von Schlüsselwortargumenten zulassen.
Dies ist ein gängiges Muster, um Standardwerte für Schlüsselwortargumente bereitzustellen und eine beliebige Anzahl von Positionsargumenten zuzulassen:
def foo(*args, **kwargs): raw = kwargs.pop('raw', False) vars = kwargs.pop('vars', None)
Wenn Sie die zusätzlichen Schlüsselwortargumente überhaupt nicht verwenden, müssen Sie sich keine Sorgen machen. Dies macht die Funktion etwas weniger selbstdokumentierend, was Sie mit einem richtig geschriebenen Dokumentstring nachholen können.
quelle