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])
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])
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]
Funciona para iterables arbitrarios. –
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
¿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
Consulte https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists
dt = datetime.datetime(*t[:7])
Es posible que desee leer sobre ello en la documentación: http://docs.python.org/tutorial/controlflow.html # desempaquetar-argumentos-listas –