Pensé que podría usar parámetros con nombre después de parámetros posicionales de longitud variable en una llamada de función en Python 2, pero obtengo un SyntaxError
al importar una clase de Python. Estoy escribiendo con el siguiente método "get", por ejemplo:
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
El error se parece a:
def get(self, *args, raw=False, vars=None):
^
SyntaxError: invalid syntax
Me gustaría poder llamar al método de varias maneras:
f = Foo()
f.get(arg1, arg2)
f.get(arg1, raw=True)
f.get(arg1, arg2, raw=True, vars=something)
etc.
La sintaxis de Python no permite argumentos variables en argumentos de función y palabra clave con el valor predeterminado al mismo tiempo. Si debe tener argumentos de palabras clave junto con un número arbitrario de argumentos posicionales, también debe permitir un número arbitrario de argumentos de palabras clave.
Este es un patrón común para proporcionar valores predeterminados para argumentos de palabras clave, además de permitir cualquier número de argumentos posicionales:
def foo(*args, **kwargs): raw = kwargs.pop('raw', False) vars = kwargs.pop('vars', None)
Si no usa los argumentos de palabras clave adicionales en absoluto, no tiene nada de qué preocuparse. Esto hace que la función sea un poco menos autodocumentada, lo que puede compensar con una cadena de documentos correctamente escrita.
fuente