Me resulta muy útil para poder crear nuevas variables en tiempo de ejecución y crear un diccionario de los resultados para su posterior procesamiento, es decir, escribir en un archivo:Python: El uso de vars() para asignar una cadena a una variable
myDict = {}
for i in range (1,10):
temp = "variable"+str(i)
vars()[temp] = myFunctionThatReturnsData() # variable1= data1, variable2 = data2,etc.
myDict[temp] = vars(temp)
que crea la entrada del diccionario [resultado1: datos1] a la que puedo llamar con myDict [resultado1]. He estado usando vars() sin realmente entender lo que estoy haciendo. Lo tomo vars()
devuelve un diccionario con las variables locales, y
vars() [x] = Y
crea una nueva entrada en el diccionario de [x: y] (?)?
Tengo un script donde paso en un diccionario preparado con {input1: data1, input2: data2}, y utilizo este método para recorrer todos los valores, almacenar todos los resultados y enviarlo a un archivo. Este bit de código está dentro de una función dentro de una clase, y está funcionando.
Mi fuente de confusión es que he leído varios mensajes sobre cómo locals() no debe ser ensuciado con, y cómo vars() es equivalente (?) A la población local() o globales() ..
Así que mi pregunta es (al menos) dos aspectos:
1. ¿qué hace exactamente vars(), o en particular, vars() [x] = y hacer,
2.Que el alcance de este diccionario es (lo que debo tener en cuenta cuando escribo programas más grandes
3.Si esta es una buena programación práctica.
¡Gracias de antemano!
Creo que 'vars() ['x'] = 4' y' x = 4' en realidad son equivalentes solo algunas veces. Si hace esto en una función, y no establece 'x' en otro lugar, y la función es optimizada por el compilador, entonces la búsqueda normal de' x' más adelante en la función (es decir, 'y = x + 2') ganó no funciona Creo que el compilador almacena en caché las variables que puede ver (posiblemente definidas en tiempo de compilación) y no tiene en cuenta este tipo de shenanigan. Si agrega una declaración ejecutiva a su función, entonces el compilador no intentará optimizar la función. –
gracias por la respuesta, para el datum en secuencia: función (datum) parece muy útil. Aquí hay muchas cosas que aprendí, ¡gracias! – PPTim
Para obtener más información sobre esa construcción, busque "iteradores de python" – jcdyer