Bueno, esto es un poco, umm ... no Pythonic ... fea ... hacker ...
He aquí un fragmento de código suponiendo que desea crear un diccionario de todas las variables locales que cree después de un puesto de control específica es tomada:
checkpoint = [ 'checkpoint' ] + locals().keys()[:]
## Various local assigments here ...
var_keys_since_checkpoint = set(locals().keys()) - set(checkpoint)
new_vars = dict()
for each in var_keys_since_checkpoint:
new_vars[each] = locals()[each]
Tenga en cuenta que agregamos explícitamente la clave 'checkpoint' en nuestra captura del locals().keys()
. También estoy tomando explícitamente una parte de eso, aunque no debería ser necesario en este caso, ya que la referencia debe aplanarse para agregarla al [lista de 'puntos de control']. Sin embargo, si estaba usando una variante de este código e intentó atajar los ['checkpoint'] + portion (because that key was already in
locals() , for example) ... then, without the [:] slice you could end up with a reference to the
locals(). Keys() `cuyos valores cambiarían a medida que agrega variables.
Offhand No puedo pensar en una forma de llamar a algo como new_vars.update()
con una lista de teclas para agregar/actualizar. Entonces, el ciclo for
es más portátil. Supongo que la comprensión de un diccionario podría usarse en versiones más recientes de Python. Sin embargo, eso parecería ser nada más que una ronda de golf de código.
Pueden las variables se definirán en los dict? Como fruitdict = dict (apple = 1, banana = 2, carrot = 3)? –
No, realmente, hay un montón de código para cada variable, por lo que sería ilegible. – ash
Supongo que sabe que su código no hace lo que el comentario dice que hace. No puede retroceder de objetos a nombres a menos que encuentre lo que desea en un diccionario de espacios de nombres como locals(). Sin embargo, podría escribir una función que busque estas variables en el diccionario de espacios de nombres y le asigne los valores encontrados; ver la respuesta de jimbob. – Thomas