¿Cómo creas diferentes nombres de variables mientras estás en un bucle?

Para propósitos de ejemplo …

for x in range(0,9): string'x' = "Hello" 

Así que termino con string1, string2, string3 … todos igualando “Hola”

Seguro que puede; se llama un diccionario :

 d={} for x in range(1,10): d["string{0}".format(x)]="Hello" In [7]: d["string5"] Out[7]: 'Hello' In [8]: d Out[8]: {'string1': 'Hello', 'string2': 'Hello', 'string3': 'Hello', 'string4': 'Hello', 'string5': 'Hello', 'string6': 'Hello', 'string7': 'Hello', 'string8': 'Hello', 'string9': 'Hello'} 

Dije esto en cierta forma, pero la mejor manera de asociar un valor con otro es un diccionario. ¡Para eso fue diseñado!

Es realmente una mala idea, pero …

 for x in range(0, 9): globals()['string%s' % x] = 'Hello' 

y luego por ejemplo:

 print(string3) 

Te regalaré:

 Hello 

Sin embargo esto es una mala práctica. Deberías usar diccionarios o listas en su lugar, como otros proponen. A menos que, por supuesto, realmente quisieras saber cómo hacerlo, pero no quisieras usarlo.

Simplemente no tiene sentido crear nombres de variables. ¿Por qué?

  • No son necesarios: puede almacenar todo en listas, diccionarios, etc.
  • Son difíciles de crear: tienes que usar exec o globals()
  • No puedes usarlos: ¿Cómo escribes el código que usa estas variables? Tienes que usar exec/globals() otra vez

Usar una lista es mucho más fácil:

 # 8 strings: `Hello String 0, .. ,Hello String 8` strings = ["Hello String %d" % x for x in range(9)] for string in strings: # you can loop over them print string print string[6] # or pick any of them 

No hagas esto usa un diccionario

 import sys this = sys.modules[__name__] # this is now your current namespace for x in range(0,9): setattr(this, 'string%s' % x, 'Hello') print string0 print string1 print string2 print string3 print string4 print string5 print string6 print string7 print string8 

no hagas esto usa un dict

globals () tiene un riesgo, ya que le da a lo que el espacio de nombres apunta actualmente, pero esto puede cambiar y, por lo tanto, modificar el retorno de globals () no es una buena idea

Una forma de hacerlo es con exec() . Por ejemplo:

 for k in range(5): exec(f'cat_{k} = k*2') 

imprimir (cat_0)
0
imprimir (cat_1)
2
imprimir (cat_2)
4
imprimir (cat_3)
6
imprimir (cat_4)
8

Aquí estoy aprovechando el práctico formato de cadena f en python 3.6+

Yo usaría una lista:

 string = [] for i in range(0, 9): string.append("Hello") 

De esta manera, tendrías 9 “Hola” y podrías obtenerlos individualmente de esta manera:

 string[x] 

Donde x identificaría cual “hola” quieres.

Entonces, print(string[1]) imprimiría Hello .

Creo que el desafío aquí no es recurrir a global ()

Personalmente definiría una lista para sus variables (dinámicas) que se mantendrían y luego la añadiré dentro de un bucle for. Luego use un bucle for independiente para ver cada entrada o incluso ejecutar otras operaciones.

Aquí hay un ejemplo: tengo varios conmutadores de red (por ejemplo, entre 2 y 8) en varios BRanches. Ahora debo asegurarme de que tengo una manera de determinar cuántos conmutadores están disponibles (o prueba de ping en vivo) en cualquier sucursal y luego realizar algunas operaciones en ellos.

Aquí está mi código:

 import requests import sys def switch_name(branchNum): # s is an empty list to start with s = [] #this FOR loop is purely for creating and storing the dynamic variable names in s for x in range(1,8,+1): s.append("BR" + str(branchNum) + "SW0" + str(x)) #this FOR loop is used to read each of the switch in list s and perform operations on for i in s: print(i,"\n") # other operations can be executed here too for each switch (i) - like SSH in using paramiko and changing switch interface VLAN etc. def main(): # for example's sake - hard coding the site code branchNum= "123" switch_name(branchNum) if __name__ == '__main__': main() 

La salida es:

BR123SW01

BR123SW02

BR123SW03

BR123SW04

BR123SW05

BR123SW06

BR123SW07