Acceso a valor de variable con nombre dynamic.

Encontré varios temas donde se discutió que la creación dinámica de variables individuales en bucles es una mala práctica y un mejor uso del diccionario.

En mi caso no necesito crearlos dinámicamente, quiero acceder a ellos en el bucle.

No quiero usar el diccionario para ellos, porque estas variables se usan en muchos lugares en el código, y solo en un lugar necesito ese acceso dynamic.

Ejemplo de idea:

car_pos = 1; man_pos = 10 car_vel = 100; man_vel = 5 for elm in ['car', 'man']: elm_pos = elm + '_pos' elm_vel = elm + '_vel' # I want values of elements with such names here print(elm_pos, elm_vel) # Desired output: # (1, 100) # (10, 5) 

Los nombres de variables son una forma terrible de relacionar piezas de información. No hay nada que vincule man_pos y man_vel excepto que ambos comienzan con el man . Aparte de eso están totalmente separados. Python tiene mejores formas de agrupar elementos como estos.

En este caso, man y car deben ser objetos con atributos pos y vel .

 class Thing: def __init__(self, pos, vel): self.pos = pos self.vel = vel # assume that both men and cars move only in one dimension man = Thing(10, 2) car = Thing(100, -5) 

Entonces su bucle es simplemente:

 for item in [car, man]: print(item.pos, item.vel) 

No lo hagas de la manera que estás tratando de hacerlo. Solo provocará lágrimas, si no las tuyas, entonces las personas que tienen que mirar tu código.

Solo use el diccionario globals (), con clave como nombre de variable. El valor de estas claves sería el valor real de estas variables.

 car_pos = 1; man_pos = 10 car_vel = 100; man_vel = 5 for elm in ['car', 'man']: elm_pos = elm + '_pos' elm_vel = elm + '_vel' print(globals()[elm_pos], globals()[elm_vel]) 

De acuerdo con todo lo que dijo kindall. Sin embargo, puedes probar la tupla con nombre para ir a la ruta no del diccionario …

 from collections import namedtuple data = namedtuple('data',('pos','vel')) car = data(1,100) man = data(10,5) for elm in (car,man): print(elm.pos,elm.vel)