Solo eche un vistazo a PEP 3102 y parece estar relacionado de alguna manera con this.
Para resumir, los parches y las opciones están ahí para aceptar argumentos variables pero la última es para aceptar argumentos de palabra clave. Los argumentos de palabra clave se pasan como un diccionario donde variable positional arguments would be wrapped as tuples.
de su ejemplo
def import_(ui, repo, patch1=None, *patches, **opts):
Los parámetros posicionales después u1,repo and patch1
podría ser envuelto como tuplas de parches. Todos los argumentos de palabra clave que siguen a los argumentos posicionales de variables se envolverán como objetos de diccionario mediante opts.
Otra cosa importante es que la responsabilidad recae en la persona que llama para asegurarse de que no se infringe la condición non-keyword arg after keyword arg
.
Así que algo que viola esto podría generar un error de sintaxis ..
Por ejemplo
llamadas como
import_(1,2,3,test="test")
import_(1,2,3,4,test="test")
import_(1,2,3,4,5)
import_(1,2,patch1=3,test="test")
son válidas, pero
import_(1,2,3,patch1=4,5)
elevarían un error de sintaxis SyntaxError: non-keyword arg after keyword arg
En el primer caso válido import_(1,2,3,test="test")
u1 = 1, repo = 2, patch1 = 3, patches =() and opts={"test":"test"}
En el segundo caso válido import_(1,2,3,patch1=4,test="test")
u1 = 1, repo = 2, patch1 = 3 , patches = (4) and opts={"test":"test"}
En el tercer caso válido import_(1,2,3,4,5)
u1 = 1, repo = 2, patch1 = 3 , patches=(4,5), and opts={}
En el cuarto caso válido import_(1,2,patch1=3,test="test")
u1 = 1, repo = 2, patch1 = 3 , patches=(), and opts={"test":"test"}
you can use patch1 as a keywords argument but doing so you cannot wrap any variable positional arguments within patches
¿Ya ha resuelto esto? Si es así, sería bueno que seleccionas la respuesta que te hizo resolver el problema como "aceptado" y anulas todas las útiles (¡si aún no lo has hecho!). :) – mac
lo siento, he estado muy ocupado todos estos días. Ahora leeré sobre tus respuestas y seleccionaré una. Gracias a todos :) – guoqiao