nuevos codificadores veces escribir código como este:
my_calculator.button_0 = tkinter.Button(root, text=0)
my_calculator.button_1 = tkinter.Button(root, text=1)
my_calculator.button_2 = tkinter.Button(root, text=2)
...
El codificador se deja con un montón de variables con nombre, con un esfuerzo de codificación de O (m * n), donde m es el número de variables con nombre y n es el número de veces s ese grupo de variables debe ser accedido (incluida la creación). El principiante más astuto observa que la única diferencia en cada una de esas líneas es un número que cambia en función de una regla, y decide usar un ciclo. Sin embargo, se quedan atascados en cómo crear dinámicamente los nombres de las variables, y pueden intentar algo como esto:
for i in range(10):
my_calculator.('button_%d' % i) = tkinter.Button(root, text=i)
Ellos pronto descubren que esto no funciona.
Si el programa requiere "nombres" de variables arbitrarias, un diccionario es la mejor opción, como se explica en otras respuestas. Sin embargo, si simplemente intenta crear muchas variables y no le importa hacer referencia a ellas con una secuencia de enteros, probablemente esté buscando un list
. Esto es particularmente cierto si sus datos son homogéneos, como lecturas de temperatura diarias, puntajes semanales de prueba o una grilla de widgets gráficos.
Esto puede ser ensamblado como sigue:
my_calculator.buttons = []
for i in range(10):
my_calculator.buttons.append(tkinter.Button(root, text=i))
Este list
también se pueden crear en una sola línea con una comprensión:
my_calculator.buttons = [tkinter.Button(root, text=i) for i in range(10)]
El resultado en ambos casos es una poblada list
, con el primer elemento al que se accede con my_calculator.buttons[0]
, el siguiente con my_calculator.buttons[1]
, y así sucesivamente. El nombre de la variable "base" se convierte en el nombre list
y el identificador variable se utiliza para acceder a él.
Por último, no olvide otras estructuras de datos, como set
, esto es similar a un diccionario, excepto que cada "nombre" no tiene un valor adjunto. Si simplemente necesita una "bolsa" de objetos, esta puede ser una gran opción. En lugar de algo como esto:
keyword_1 = 'apple'
keyword_2 = 'banana'
if query == keyword_1 or query == keyword_2:
print('Match.')
Usted tendrá la siguiente:
keywords = {'apple', 'banana'}
if query in keywords:
print('Match.')
Utilice un list
para una secuencia de objetos similares, una set
para una bolsa ordenada arbitraria de objetos, o una dict
de una bolsa de nombres con valores asociados.
se trata de los aspectos de comunidad y depuración que causan el horror. Imagine tratar de averiguar dónde cambió la variable 'foo' cuando no hay lugar en su código donde realmente cambie 'foo'. Imagine además que es el código de otra persona el que tiene que mantener ... OK, puede ir a su lugar feliz ahora. –
La necesidad todavía surge, sin embargo. Solía pensar que tenía que hacer este tipo de cosas todo el tiempo antes de encontrarme con lenguajes de programación reales. Grandes sugerencias aquí para la transición a una mentalidad más sana. –
Puede hacerlo en la macrolanza SAS. A veces tiene que hacerlo, porque el único tipo de datos en macros SAS es la cadena: -/ –