Tenemos la mejor respuesta que hemos encontrado on line. Nosotros queremos que te sirva de ayuda y si puedes aportar alguna mejora hazlo con libertad.
Solución:
Los objetos no necesariamente tienen nombres en Python, por lo que no puede obtener el nombre.
No es raro que los objetos tengan un __name__
attribute en esos casos, tienen un nombre, pero esto no es parte de Python estándar, y la mayoría de los tipos integrados no tienen uno.
Cuando creas una variable, como la x, y, z
arriba, esos nombres solo actúan como “punteros” o “referencias” a los objetos. El objeto en sí mismo no sabe qué nombre está usando para él, y no puede obtener fácilmente (si es que lo hace) los nombres de todas las referencias a ese objeto.
Actualización: Sin embargo, las funciones tienen un __name__
(a menos que sean lambdas) entonces, en ese caso puedes hacer:
dict([(t.__name__, t) for t in fun_list])
Eso no es realmente posible, ya que podría haber múltiples variables que tengan el mismo valor, o un valor podría no tener variable, o un valor podría tener el mismo valor que una variable solo por casualidad.
Si realmente quieres hacer eso, puedes usar
def variable_for_value(value):
for n,v in globals().items():
if v == value:
return n
return None
Sin embargo, sería mejor si iteraras sobre los nombres en primer lugar:
my_list = ["x", "y", "z"] # x, y, z have been previously defined
for name in my_list:
print "handling variable ", name
bla = globals()[name]
# do something to bla
Este one-liner funciona, para todo tipo de objetos, siempre y cuando estén en globals()
dict, que deberían ser:
def name_of_global_obj(xx):
return [objname for objname, oid in globals().items()
if id(oid)==id(xx)][0]
o equivalente:
def name_of_global_obj(xx):
for objname, oid in globals().items():
if oid is xx:
return objname
Aquí tienes las reseñas y puntuaciones
Si guardas algún reparo o disposición de ascender nuestro división te proponemos dejar una aclaración y con mucho placer lo analizaremos.