Die Antwort ist, dass Sie dies nicht tun möchten. Verwenden Sie stattdessen eine Liste.
Sven Marnach
2
Wenn Sie es hier verwenden möchten, können Sie x = ["Hello" * 9]darauf zugreifen. x[0], x[1] ...Wenn Sie es auf eine andere Weise verwenden möchten, müssen Sie uns meiner Meinung nach mehr Code-Hintergrund geben.
James Khoury
3
Wenn ich jemals Macht über eine Sprache habe, gibt die Verwendung von Zahlen in Variablennamen SyntaxError: Use a data structure.;-)
Jochen Ritzel
1
und vergiss deine string0 nicht;)
wim
10
@ James Khoury: Das ist nicht ganz richtig. Das würde xzu einer Liste führen, die ein einzelnes Element enthält - die Zeichenfolge "HelloHelloHelloHelloHelloHelloHelloHelloHello". Ich denke du meintest x = ["Hello"] * 9.
for x in range(0,9):
globals()['string%s'% x]='Hello'
und dann zum Beispiel:
print(string3)
werde dir geben:
Hello
Dies ist jedoch eine schlechte Praxis. Sie sollten stattdessen Wörterbücher oder Listen verwenden, wie andere vorschlagen. Es sei denn natürlich, Sie wollten wirklich wissen, wie es geht, wollten es aber nicht verwenden.
Können Sie erläutern, warum dies eine schlechte Idee ist?
Ajdigregorio
6
@paintedcones: Erstens sollte es einen Weg geben, dies zu tun , und die Verwendung einfacher Wörterbücher ist natürlicher. Die Verwendung des globalen Wörterbuchs ist eine schlechte Idee, da es auch "implizit" globale Variablen erstellt oder diese ändert. Da sowohl das Setzen als auch das Ändern von Variablen auf diese Weise eine Wörterbuchnotation erfordert, gibt es keinen Grund, globals()anstelle einer einfachen zu verwenden dict.
Tadeck
Es gibt einige Situationen, in denen Sie eine Reihe von Variablen erstellen müssen, x1, x2, x3 usw. In den meisten Situationen ist die Verwendung eines Wörterbuchs jedoch am besten geeignet.
DevilApple227
20
Eine Möglichkeit, dies zu tun, ist mit exec(). Beispielsweise:
Erinnern Sie sich an execetwas, schwarze Magie, Angriffslücken, schlechtes Zeug, aber es beantwortet die gestellte Frage.
Psaxton
18
Es ist einfach sinnlos, variable Variablennamen zu erstellen. Warum?
Sie sind nicht erforderlich: Sie können alles in Listen, Wörterbüchern usw. speichern
Sie sind schwer zu erstellen: Sie müssen execoder verwendenglobals()
Sie können sie nicht verwenden: Wie schreiben Sie Code, der diese Variablen verwendet? Sie müssen exec/globals()erneut verwenden
Die Verwendung einer Liste ist viel einfacher:
# 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 stringprint string[6]# or pick any of them
Danke dir!! Ich musste das Formular aus dem Wörterbuch oder der Liste der Datenrahmen auswählen. Und da ich den Datenrahmen basierend auf einem bestimmten Wert im Datenrahmen neu anordnen musste, hätte ich kein Wörterbuchformular verwenden können. Ja, du hast recht! In einigen Fällen ist es wirklich sinnlos, Variablennamen zu erstellen!
Doo Hyun Shin
9
Verwenden Sie dazu kein Wörterbuch
import sys
this = sys.modules[__name__]# this is now your current namespacefor x in range(0,9):
setattr(this,'string%s'% x,'Hello')print string0print string1print string2print string3print string4print string5print string6print string7print string8
Verwenden Sie dazu kein Diktat
globals () birgt ein Risiko, da es Ihnen angibt, auf was der Namespace derzeit zeigt. Dies kann sich jedoch ändern. Daher ist es keine gute Idee, die Rückgabe von globals () zu ändern
Im Gegensatz zu einigen Sprachen können Sie Elementen in einer Python-Liste, die noch nicht vorhanden sind, keine Elemente zuweisen (es wird der Fehler "Listenzuweisungsindex außerhalb des Bereichs" angezeigt). Möglicherweise möchten Sie string.append("Hello")stattdessen verwenden.
Greg Hewgill
1
Ich hätte das wissen müssen, danke, dass du mich daran erinnert hast. Es ist repariert.
Lledargo
Ihr Recht, ich habe darüber nachgedacht, am Ende eines Strings etwas hinzuzufügen, nicht zu einem Array. Ich entschuldige mich bei allen.
Lledargo
Pedantisch "Sie hätten 9" Hallo "" sollte "Sie würden 9 Mal" Hallo "haben". Es ist dieselbe Saite, die wiederholt wird, nicht neun verschiedene Saiten.
Duncan
2
Ich denke, die Herausforderung besteht hier nicht darin, global () aufzurufen.
Ich würde persönlich eine Liste für Ihre (dynamischen) Variablen definieren, die gehalten werden soll, und sie dann innerhalb einer for-Schleife anhängen. Verwenden Sie dann eine separate for-Schleife, um jeden Eintrag anzuzeigen oder sogar andere Operationen auszuführen.
Hier ein Beispiel: Ich habe eine Reihe von Netzwerk-Switches (z. B. zwischen 2 und 8) in verschiedenen Branchen. Jetzt muss ich sicherstellen, dass ich feststellen kann, wie viele Switches in einem bestimmten Zweig verfügbar sind (oder ob ein Test durchgeführt wird), und dann einige Operationen an ihnen ausführen.
Hier ist mein Code:
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()
Das Wörterbuch kann Werte enthalten und Werte können mithilfe der update () -Methode hinzugefügt werden. Sie möchten, dass Ihr System Variablen erstellt, daher sollten Sie wissen, wo Sie diese aufbewahren müssen.
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]
darauf zugreifen.x[0], x[1] ...
Wenn Sie es auf eine andere Weise verwenden möchten, müssen Sie uns meiner Meinung nach mehr Code-Hintergrund geben.SyntaxError: Use a data structure.
;-)x
zu einer Liste führen, die ein einzelnes Element enthält - die Zeichenfolge "HelloHelloHelloHelloHelloHelloHelloHelloHello". Ich denke du meintestx = ["Hello"] * 9
.Antworten:
Sicher kannst du; es heißt ein Wörterbuch :
Ich sagte dies etwas in Schach, aber der beste Weg, einen Wert mit einem anderen Wert zu verknüpfen, ist ein Wörterbuch. Dafür wurde es entwickelt!
quelle
Es ist wirklich eine schlechte Idee, aber ...
und dann zum Beispiel:
werde dir geben:
Dies ist jedoch eine schlechte Praxis. Sie sollten stattdessen Wörterbücher oder Listen verwenden, wie andere vorschlagen. Es sei denn natürlich, Sie wollten wirklich wissen, wie es geht, wollten es aber nicht verwenden.
quelle
globals()
anstelle einer einfachen zu verwendendict
.Eine Möglichkeit, dies zu tun, ist mit
exec()
. Beispielsweise:Hier nutze ich die praktische Formatierung von F-Strings in Python 3.6+
quelle
exec
etwas, schwarze Magie, Angriffslücken, schlechtes Zeug, aber es beantwortet die gestellte Frage.Es ist einfach sinnlos, variable Variablennamen zu erstellen. Warum?
exec
oder verwendenglobals()
exec/globals()
erneut verwendenDie Verwendung einer Liste ist viel einfacher:
quelle
Verwenden Sie dazu kein Wörterbuch
Verwenden Sie dazu kein Diktat
globals () birgt ein Risiko, da es Ihnen angibt, auf was der Namespace derzeit zeigt. Dies kann sich jedoch ändern. Daher ist es keine gute Idee, die Rückgabe von globals () zu ändern
quelle
Das sollte funktionieren.
quelle
Ich würde eine Liste verwenden:
Auf diese Weise hätten Sie 9 "Hallo" und Sie könnten sie einzeln wie folgt erhalten:
Wo
x
würde identifizieren, welches "Hallo" Sie wollen.Also
print(string[1])
würde druckenHello
.quelle
string.append("Hello")
stattdessen verwenden.Ich denke, die Herausforderung besteht hier nicht darin, global () aufzurufen.
Ich würde persönlich eine Liste für Ihre (dynamischen) Variablen definieren, die gehalten werden soll, und sie dann innerhalb einer for-Schleife anhängen. Verwenden Sie dann eine separate for-Schleife, um jeden Eintrag anzuzeigen oder sogar andere Operationen auszuführen.
Hier ein Beispiel: Ich habe eine Reihe von Netzwerk-Switches (z. B. zwischen 2 und 8) in verschiedenen Branchen. Jetzt muss ich sicherstellen, dass ich feststellen kann, wie viele Switches in einem bestimmten Zweig verfügbar sind (oder ob ein Test durchgeführt wird), und dann einige Operationen an ihnen ausführen.
Hier ist mein Code:
Ausgabe ist:
BR123SW01
BR123SW02
BR123SW03
BR123SW04
BR123SW05
BR123SW06
BR123SW07
quelle
Die Verwendung von Wörterbüchern sollte der richtige Weg sein, um die Variablen und zugehörigen Werte beizubehalten. Sie können Folgendes verwenden:
Wenn Sie die Variablen jedoch zu den lokalen Variablen hinzufügen möchten, können Sie Folgendes verwenden:
Wenn Sie ihnen beispielsweise die Werte 0 bis 8 zuweisen möchten, können Sie Folgendes verwenden:
quelle
Das Wörterbuch kann Werte enthalten und Werte können mithilfe der update () -Methode hinzugefügt werden. Sie möchten, dass Ihr System Variablen erstellt, daher sollten Sie wissen, wo Sie diese aufbewahren müssen.
quelle