En Python, puedo escribir algo como esto:
some_list = [(1, 2, 3), (3, 2, 1)] for i, *args in some_list: print(args)Obtendré la siguiente salida:
[2, 3] [2, 1] Cuando usamos *args como argumentos de función, se desempaqueta en una tuple .
¿Por qué recibimos una list en esta situación?
Es solo una decisión de diseño. Hacerlo una tuple se debatió en el PEP 3132 , pero se rechazó por motivos de usabilidad:
Haga que el objetivo destacado sea una tupla en lugar de una lista. Esto sería coherente con los *args de una función, pero dificultaría el procesamiento posterior del resultado.
De manera similar, se rechazó hacerlo del mismo tipo que el iterable en el lado derecho de la asignación:
Intente darle al objetivo destacado el mismo tipo que la fuente iterable, por ejemplo, b en a, *b = 'hola' se le asignaría la cadena 'ello'. Esto puede parecer bueno, pero es imposible hacerlo bien de manera consistente con todos los iterables.
El mismo ejemplo tuyo está listado en el mismo PEP bajo especificación .
Algunos razonamientos se encuentran en la lista de correo de ese debate.
Cuando se trata de un iterador, no se sabe la longitud de antemano, por lo que la única forma de obtener una tupla sería producir primero una lista y luego crear una tupla a partir de ella.