Python, de mots clés par défaut arguments après la longueur variable des arguments de position
Je pensais que je pouvais utiliser des paramètres nommés après de longueur variable des paramètres positionnels dans un appel de fonction en Python 2, mais j'obtiens un SyntaxError
lors de l'importation d'un python de classe. Je suis en train d'écrire à la suite de la méthode "get", par exemple:
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
L'erreur ressemble:
def get(self, *args, raw=False, vars=None):
^
SyntaxError: invalid syntax
J'aimerais pouvoir appeler la méthode de plusieurs façons:
f = Foo()
f.get(arg1, arg2)
f.get(arg1, raw=True)
f.get(arg1, arg2, raw=True, vars=something)
etc.
Vous devez vous connecter pour publier un commentaire.
Il fonctionne, mais uniquement en Python 3. Voir PEP Trois mille cents deux. De en jetant un regard sur le "quoi de neuf" de documents, il semble qu'il n'y a pas de 2.x-port, de sorte que vous êtes hors de la chance. Vous aurez à accepter le mot-clé arguments (
**kwargs
) et manuellement l'analyser. Vous pouvez utiliserd.get(k, default)
soitd[k]
oudefault
si ce n'est pas là. Pour supprimer un argument dekwargs
, par exemple, avant d'appeler une super méthode de la classe, de l'utilisationd.pop
.Noter que dans
def get(self, *args, raw=False, vars=None):
, leraw=False
etvars=None
n'ont rien à voir avec le mot-clé arguments. Ceux-ci sont par défaut des valeurs d'argument. Arguments avec une valeur par défaut peut être transmis par position, et des arguments sans valeur par défaut peut être transmis par mot-clé:De la même façon, le mot-seuls les arguments ne sont pas tenus d'avoir une valeur par défaut. Venant après les
*args
argument est ce qui les marque comme mot-clé seule, et non la présence d'une valeur par défaut:Python syntaxe ne permet pas de variable args dans la fonction et les arguments mot-clé avec une valeur par défaut en même temps. Si vous devez avoir des arguments mot-clé le long avec un nombre arbitraire d'arguments de position, vous devez autoriser nombre arbitraire d'arguments mots-clefs ainsi.
C'est un modèle courant à fournir des valeurs par défaut pour le mot-clé arguments, ainsi qu'en permettant à un nombre quelconque d'arguments positionnels:
Si vous n'utilisez pas le mot-clé supplémentaire des arguments à tous, vous n'avez rien à craindre. Cela rend la fonction un peu moins de l'auto-documentation, que vous pouvez faire avec un écrit correctement docstring.