¿Cómo accedo al nombre de una variable dada en python?

Estoy progtwigndo en python y necesito acceder al nombre que le he dado a un objeto para poder pasarlo como una cadena (concatenado con otra cadena).

La razón por la que necesito hacer esto es que el progtwig que estoy usando me obliga a crear un global (que en mi caso es un diccionario) y estoy escribiendo una función para trabajar en general con varios objetos diferentes (cada uno con conjuntos similares de propiedades, por ejemplo, el objeto 1 es de longitud 2 (que significa en mi caso 2 neuronas) etiquetadas como 0 y 1 y cada una de ellas tiene 4 propiedades a, b, c, d. Quiero crear un “diccionario de filetree” de estas propiedades pero tanto object1 como object 2 son 2 instancias de la misma clase, por lo tanto, necesito cambiar las claves de primer nivel para que sean ‘NAME1_0,’ NAME1_1 ‘,’ NAME2_0 ‘,’ NAME2_1 ‘).

def Init(neuron,input): #Initialises the neuron group, arguements are neuron (neurongroup) and input (neurongroup) global dict dict={} for x in range(0,len(neuron)): neuron[x].L=0 neuron[x].G=0 neuron[x].ron=1/period neuron[x].roff=1/period dict[x]={'tau_on':0.5, 'Non_off':neuron[x].roff*0.5, 'Non_off':neuron[x].ron*0.5, 'Ni_on':ones(len(input))*qon*0.5, 'Ni':ones(len(input))*qoff*0.5+ones(len(input))*qon*0.5, 'p_current':0, 'p_previous':0, 'my_tau_on':[], 'my_Non_off':[], 'my_Noff_on':[], 'my_Ni_on':[], 'my_Ni':[], 'my_p_on':[], 'my_ron':[], 'my_roff':[], 'my_theta':[], 'my_weights':[], 'my_record_times':[]} dict['%s' % x, neuron]=dict.pop(x) 

no funciona, ya que no da el nombre asignado al objeto, sino simplemente el nombre del objeto en sí. Para un caso más mínimo de mi problema.

 NAME1=4 def func(x): #creates string of 'NAME1' print 'x' func(NAME1) #output='NAME1' 

Podrías hacer una búsqueda inversa de los nombres en globals ():

 >>> NAME1 = 4 >>> def name_of(value): for k, v in globals().items(): if v is value: return k raise KeyError('did not find a name for %s' % value) >>> name_of(NAME1) 'NAME1' 

Si el mismo objeto se ha asignado a más de un nombre, solo se devolverá un nombre.

Si desea buscar más ampliamente que solo globales, busque los dictados en gc.get_referrers(value) y capture todas las coincidencias:

 >>> def names_of(value): 'Find all names for the value' result = [] for d in gc.get_referrers(value): if isinstance(d, dict): for k, v in d.items(): if v is value: result.append(k) return result >>> import math >>> pie = math.pi >>> names_of(pie) ['pie', '_pi', 'pi', 'pi']