2010-02-10 12 views
77

Esto es feo. ¿Cuál es una forma más pitonica de hacerlo?¿Cuál es la forma pitónica de desempaquetar tuplas?

import datetime 

t= (2010, 10, 2, 11, 4, 0, 2, 41, 0) 
dt = datetime.datetime(t[0], t[1], t[2], t[3], t[4], t[5], t[6]) 
+5

Es posible que desee leer sobre ello en la documentación: http://docs.python.org/tutorial/controlflow.html # desempaquetar-argumentos-listas –

Respuesta

111

En general, puede utilizar la sintaxis func(*tuple). Incluso puede pasar una parte de la tupla, que parece que lo que estamos tratando de hacer aquí:

t = (2010, 10, 2, 11, 4, 0, 2, 41, 0) 
dt = datetime.datetime(*t[0:7]) 

Esto se llama desembalaje una tupla, y se puede utilizar para otros iterables (como las listas) también. He aquí otro ejemplo (del Python tutorial):

>>> range(3, 6)    # normal call with separate arguments 
[3, 4, 5] 
>>> args = [3, 6] 
>>> range(*args)   # call with arguments unpacked from a list 
[3, 4, 5] 
+6

Funciona para iterables arbitrarios. –

+2

Me gustaría agregar que esta sintaxis funciona en cualquier lugar (no solo en llamadas a funciones) en Python 3.5, por lo que por ejemplo sentencias como 'x, y, z = * (1, 2, 3)' funcionarán sin error (como debería haber sido hace mucho tiempo) – Nearoo

+0

¿hay alguna manera de hacer esto entre otros artículos de la lista? como 'my_tuple = (" B "," C "); "% s% s% s"% ("A", * my_tuple) '? – Dannid

Cuestiones relacionadas