usuario132262
esto es feo ¿Cuál es una forma más pitónica de hacerlo?
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])
Eli Bendersky
En general, puede utilizar el func(*tuple)
sintaxis. Incluso puede pasar una parte de la tupla, que parece ser lo que está tratando de hacer aquí:
t = (2010, 10, 2, 11, 4, 0, 2, 41, 0)
dt = datetime.datetime(*t[0:7])
Se llama desempacar una tupla, y también se puede usar para otros iterables (como listas). He aquí otro ejemplo (de la Tutorial de Python):
>>> 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.
–Mike Graham
10 de febrero de 2010 a las 16:36
-
Me gustaría agregar que esta sintaxis funciona en cualquier lugar (no solo en llamadas a funciones) en python 3.5, por ejemplo, declaraciones como
x, y, z = *(1, 2, 3)
funcionará sin errores (como debería haber sido hace mucho tiempo)– Nearoo
1 de enero de 2016 a las 16:05
-
¿Hay alguna manera de hacer esto entre otros elementos de la lista? como
my_tuple = ("B", "C"); "%s %s %s" % ("A", *my_tuple)
?– Dannid
24/03/2016 a las 18:10
-
No importa, creo que esto es una limitación del método de sustitución de cadenas %s. Usando
"{} {} {}".format("A", *my_tuple)
en cambio hace el truco.– Dannid
24/03/2016 a las 23:36
-
¿Alguien sabe algún detalle sobre cómo Python implementa el desempaquetado internamente?
– dopatramán
17 de noviembre de 2017 a las 18:37
charles beattie
Referirse https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists
dt = datetime.datetime(*t[:7])
Es posible que desee leer sobre esto en los documentos: docs.python.org/tutorial/…
– Nadia Alramli
10 de febrero de 2010 a las 16:18