El código siguiente no funciona, supongo que porque la gente del lugar() variable dentro de la comprensión se referirá al bloque anidado, donde se evalúa la comprensión:utilizando los locales() dentro de la comprensión diccionario
def f():
a = 1
b = 2
list_ = ['a', 'b']
dict_ = {x : locals()[x] for x in list_}
que podría utilizar globals()
en su lugar, y parece funcionar, pero eso puede venir con algunos problemas adicionales (por ejemplo, si hubo una variable de un ámbito circundante que tiene el mismo nombre).
¿Hay algo que haga que el diccionario utilice las variables con precisión en el alcance de la función f
?
Nota: Estoy haciendo esto porque tengo muchas variables que me gustaría poner en un diccionario más adelante, pero no quiero complicar el código escribiendo dict_['a']
en lugar de a
mientras tanto.
yo no pienso en esto! ¿Y por qué es malo usar lugareños() de esta manera? No estoy usando nada no documentado, ¿verdad? – max
No está indocumentado, pero el uso de 'locals()' puede provocar que el compilador genere código menos que óptimo para la función a la que se hace referencia. Por ejemplo, si el compilador determina que puede optimizar el uso de alguna variable temporal (tal vez alguna * otra * variable en la función no relacionada con su diccionario), es posible que no pueda hacer eso si se usa 'locals()' dentro de la función. Además, al evitar crear un diccionario primero, se repite a sí mismo con (1) la asignación de cada variable, y (2) los nombres en la lista. –
Entonces estoy atascado: http://stackoverflow.com/questions/4067463/alternative-to-locals-in-printing-a-table-with-a-header – max