Pomyślałem, że mogę użyć nazwanych parametrów po parametrach pozycyjnych o zmiennej długości w wywołaniu funkcji w Pythonie 2, ale otrzymuję SyntaxError
podczas importowania klasy Pythona. Piszę następującą metodą „pobierz”, na przykład:
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
Błąd wygląda następująco:
def get(self, *args, raw=False, vars=None):
^
SyntaxError: invalid syntax
Chciałbym móc wywołać tę metodę na kilka sposobów:
f = Foo()
f.get(arg1, arg2)
f.get(arg1, raw=True)
f.get(arg1, arg2, raw=True, vars=something)
itp.
Składnia Pythona nie zezwala na zmienne argumenty w argumentach funkcji i słów kluczowych z wartością domyślną w tym samym czasie. Jeśli musisz mieć argumenty słów kluczowych wraz z dowolną liczbą argumentów pozycyjnych, musisz również zezwolić na dowolną liczbę argumentów ze słów kluczowych.
Jest to typowy wzorzec zapewniający domyślne wartości argumentów słów kluczowych, a także zezwalający na dowolną liczbę argumentów pozycyjnych:
def foo(*args, **kwargs): raw = kwargs.pop('raw', False) vars = kwargs.pop('vars', None)
Jeśli w ogóle nie używasz dodatkowych argumentów słów kluczowych, nie masz się czym martwić. To sprawia, że funkcja jest nieco mniej samodokumentująca, co można uzupełnić odpowiednio napisanym dokumentem.
źródło