La respuesta es que no quieres hacer esto. Use una lista en su lugar.
Sven Marnach
2
Si es aquí donde quiere usarlo, puede tener x = ["Hello" * 9]acceso a él x[0], x[1] ...si desea usarlo de una manera diferente, creo que tendrá que darnos un poco más de código de fondo.
James Khoury
3
Si alguna vez tengo poder sobre un idioma, usar números en nombres de variables me dará SyntaxError: Use a data structure.;-)
Jochen Ritzel
1
y no olvides tu string0;)
wim
10
@ James Khoury: Eso no está del todo bien. Eso terminaría xsiendo una lista que contiene un único elemento: la cadena "HelloHelloHelloHelloHelloHelloHelloHelloHello". Creo que quisiste decir x = ["Hello"] * 9.
for x in range(0,9):
globals()['string%s'% x]='Hello'
y luego por ejemplo:
print(string3)
Te regalaré:
Hello
Sin embargo, esta es una mala práctica. En su lugar, debe usar diccionarios o listas, como otros proponen. A menos, por supuesto, que realmente quisieras saber cómo hacerlo, pero no quisieras usarlo.
@paintedcones: Primero, debería haber una forma de hacerlo , y usar diccionarios simples es más natural. En cambio, usar el diccionario global es una mala idea, porque también "implícitamente" crea variables globales o las modifica. Dado que tanto la configuración como la modificación de variables de esta manera requieren notación de diccionario, no hay razón para usar en globals()lugar de algunas simples dict.
Tadeck
Hay algunas situaciones en las que necesita hacer un montón de variables, x1, x2, x3, etc. Pero en la mayoría de las situaciones, usar un diccionario es lo más apropiado.
Recuerde execalgo, magia negra, vulnerabilidades de ataque, cosas malas, pero responde la pregunta tal como se le preguntó.
psaxton
18
Simplemente no tiene sentido crear nombres de variables variables. ¿Por qué?
No son necesarios: puede almacenar todo en listas, diccionarios, etc.
Son difíciles de crear: tienes que usar execoglobals()
No puede usarlos: ¿cómo se escribe el código que usa estas variables? Tienes que usar de exec/globals()nuevo
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 themprint string
print string[6]# or pick any of them
¡¡Gracias!! Necesitaba elegir el formulario entre el diccionario o la lista de marcos de datos. Y dado que necesitaba reordenar el marco de datos basado en un cierto valor en el marco de datos, no podría haber usado el formulario de diccionario. ¡Si, tienes razón! ¡En algunos casos es realmente inútil crear nombres de variables!
Doo Hyun Shin
9
No hagas esto usa un diccionario
import sys
this = sys.modules[__name__]# this is now your current namespacefor 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 riesgo ya que le da a lo que apunta el espacio de nombres actualmente, pero esto puede cambiar y, por lo tanto, modificar el retorno de globals () no es una buena idea
A diferencia de algunos lenguajes, no puede asignar elementos en una lista de Python que aún no existan (obtendrá un error de "índice de asignación de lista fuera de rango"). Es posible que desee utilizar string.append("Hello")en su lugar.
Greg Hewgill
1
Debería haberlo sabido, gracias por recordármelo. Está arreglado.
Lledargo
A la derecha, estaba pensando en agregar al final de una cadena, no agregar a una matriz. Mis disculpas a todos.
Lledargo
Pendientemente 'tendrías 9 "Hola"' debería ser 'tendrías 1 "Hola" 9 veces ". Es la misma cadena repetida, no nueve cadenas de diferencia.
Duncan
2
Creo que el desafío aquí no es recurrir a global ()
Definiría personalmente una lista para sus variables (dinámicas) que se mantendría y luego la agregaría dentro de un ciclo for. Luego use un bucle for separado para ver cada entrada o incluso ejecutar otras operaciones.
Aquí hay un ejemplo: tengo varios conmutadores de red (digamos entre 2 y 8) en varias sucursales. Ahora necesito asegurarme de tener una manera de determinar cuántos conmutadores están disponibles (o prueba de ping activo) en cualquier rama 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 sfor 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 onfor 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()
El diccionario puede contener valores y los valores se pueden agregar utilizando el método update (). Desea que su sistema cree variables, por lo que debe saber dónde guardar.
variables ={}
break_condition=True# Dont forget to add break condition to while loop if you dont want your system to go crazy.
name =“variable”
i =0
name = name + str(i)#this will be your variable name.whileTrue:
value =10#value to assign
variables.update({name:value})if break_condition ==True:break
x = ["Hello" * 9]
acceso a élx[0], x[1] ...
si desea usarlo de una manera diferente, creo que tendrá que darnos un poco más de código de fondo.SyntaxError: Use a data structure.
;-)x
siendo una lista que contiene un único elemento: la cadena "HelloHelloHelloHelloHelloHelloHelloHelloHello". Creo que quisiste decirx = ["Hello"] * 9
.Respuestas:
Seguro que puede; se llama diccionario :
Dije esto de alguna manera bajo control, pero realmente la mejor manera de asociar un valor con otro valor es un diccionario. ¡Para eso fue diseñado!
fuente
Es realmente una mala idea, pero ...
y luego por ejemplo:
Te regalaré:
Sin embargo, esta es una mala práctica. En su lugar, debe usar diccionarios o listas, como otros proponen. A menos, por supuesto, que realmente quisieras saber cómo hacerlo, pero no quisieras usarlo.
fuente
globals()
lugar de algunas simplesdict
.Una forma de hacerlo es con
exec()
. Por ejemplo:Aquí estoy aprovechando el práctico formato de cadena f en Python 3.6+
fuente
exec
algo, magia negra, vulnerabilidades de ataque, cosas malas, pero responde la pregunta tal como se le preguntó.Simplemente no tiene sentido crear nombres de variables variables. ¿Por qué?
exec
oglobals()
exec/globals()
nuevoUsar una lista es mucho más fácil:
fuente
No hagas esto usa un diccionario
no hagas esto usa un dict
globals () tiene riesgo ya que le da a lo que apunta el espacio de nombres actualmente, pero esto puede cambiar y, por lo tanto, modificar el retorno de globals () no es una buena idea
fuente
Esto debería funcionar.
fuente
Yo usaría una lista:
De esta manera, tendría 9 "Hola" y podría obtenerlos individualmente de esta manera:
Dónde
x
identificaría qué "Hola" quieres.Entonces,
print(string[1])
imprimiríaHello
.fuente
string.append("Hello")
en su lugar.Creo que el desafío aquí no es recurrir a global ()
Definiría personalmente una lista para sus variables (dinámicas) que se mantendría y luego la agregaría dentro de un ciclo for. Luego use un bucle for separado para ver cada entrada o incluso ejecutar otras operaciones.
Aquí hay un ejemplo: tengo varios conmutadores de red (digamos entre 2 y 8) en varias sucursales. Ahora necesito asegurarme de tener una manera de determinar cuántos conmutadores están disponibles (o prueba de ping activo) en cualquier rama y luego realizar algunas operaciones en ellos.
Aquí está mi código:
Salida es:
BR123SW01
BR123SW02
BR123SW03
BR123SW04
BR123SW05
BR123SW06
BR123SW07
fuente
El uso de diccionarios debe ser la forma correcta de mantener las variables y los valores asociados, y puede usar esto:
Pero si desea agregar las variables a las variables locales, puede usar:
Y, por ejemplo, si desea asignarles valores del 0 al 8, puede usar:
fuente
El diccionario puede contener valores y los valores se pueden agregar utilizando el método update (). Desea que su sistema cree variables, por lo que debe saber dónde guardar.
fuente