python - sumar - Asigna múltiples variables a la vez con nombres de variables dinámicas
tipos de variables en python (7)
Soy consciente de que puedo asignar múltiples variables a varios valores a la vez con:
(foo, bar, baz) = 1, 2, 3
Y tienen foo = 1, bar = 2, y así sucesivamente.
Pero, ¿cómo podría hacer que los nombres de las variables sean más dinámicos? Es decir,
somefunction(data,tupleofnames):
(return that each name mapped to a single datum)
somefunction((1,2,3),(foo,bar,baz))
¿Y tiene lo mismo?
¿Qué tal esto?
def somefunction(data, tupleofnames):
length = len(tupleofnames)
for i in range(0, length):
globals()[tupleofnames[i]] = data[i]
Aquí asumo que los datos y tupleofnames son listas donde tupleofnames es una lista de cadenas. Pero como Thomas mencionó, esto no es una buena práctica. Se puede corromper fácilmente su aplicación.
Echa un vistazo a los documentos de ayuda para zip y mapa. Por ejemplo, para zip: -
>>> zip( (1,2,3) , (''foo'',''bar'',''baz'') )
[(1, ''foo''), (2, ''bar''), (3, ''baz'')]
mapa requiere una función para mapear secuencias juntas. Pero, puede usar Ninguno en lugar de una función para devolver los mismos resultados que el archivo zip, arriba.
>>> map( None, (1,2,3) , (''foo'',''bar'',''baz'') )
[(1, ''foo''), (2, ''bar''), (3, ''baz'')]
Entiendo que las respuestas anteriores son todo lo que necesitan, pero tengo un buen truco de programación que también podría ayudarlo cuando desee asignar una tupla particular a las variables.
tupla T
T = (A, B, C)
las variables
var1, var2, var3 = T
Hay formas de hacerlo, pero no son buenas, y se considera una mala práctica en Python. Las nuevas variables no deben ser creadas por magia. Si desea tener una colección de cosas, use una lista, diccionario o conjunto, según corresponda.
Por ejemplo, podría devolver un diccionario: {"foo":1, "bar":2, "baz":3}
Puedes hacerlo así:
(foo, bar, baz) = (1, 2, 3)
Si los diccionarios no son lo que usted quiere, entonces posiblemente las parejas nombradas son el camino a seguir: permiten la creación eficiente de varias instancias de datos agrupados, con atributos nombrados.
http://docs.python.org/library/collections.html#collections.namedtuple
from collections import namedtuple
mytype = namedtuple("mytype", "foo bar baz")
a = mytype(1,2,3)
a.foo
1
a.bar
2
a.baz
3
(foo, bar, baz) = [None] * 3
a,b,c = [0]*3
a,b,c = ["nihao"]*3