2016-05-25 5 views
0

Ich muss ein Bild drei Variablen zuweisen, dsp1, dsp2, dsp3 durch Schleifen. Bei der Ausführung bekomme ich einen Syntaxfehler.Python: Zuweisen von Bild zu einer Variablen mit Schleife Anweisung

SyntaxError: kann dem Operator nicht zugewiesen werden.

for i in range(0,3):  
    dsp+str(i)=Image.open("L1.jpg") 

What is the problem with 'str(i)' ?

Kann man mit einfachen Beispiel erklären?

+1

Warum brauchen Sie dynamische Variablennamen? Könnten Sie diese stattdessen Elementen in einer Liste oder Schlüssel in einem Wörterbuch zuweisen? – Andy

+1

Sie brauchen die 0 nicht in Reichweite. Du kannst einfach 'range (3)' machen. –

+0

Ich verstehe nicht mit Liste. Könntest du es zeigen? @Andy – Sugantharaja

Antwort

2

Stattdessen dynamische Variablen zu erzeugen, stellen diese Bilder in einer Liste:

images = [] 
for i in range(3): 
    images[i] = Image.open("L1.jpg") 

Mit dieser Methode wird die L1.jpg die folgenden zugeordnet:

images[0] 
images[1] 
images[2] 

Alternativ können Sie auch ein Wörterbuch verwenden können, näher an die Variablennamen Format Sie verwenden, zu erhalten:

images = {} 
for i in range(3): 
    images['dsp' + str(i)] = Image.open("L1.jpg") 

Dies erzeugt ein Wörterbuch mit folgendem Layout:

{ 
'dsp2': <image object>, 
'dsp1': <image object>, 
'dsp0': <image object> 
} 

Sie können auf jedes dieser Bilder zugreifen, indem Sie den Schlüssel (d. H. image['dsp1'])

In beiden Fällen müssen Sie sich keine Gedanken über dynamische Variablen machen. Stattdessen befindet sich alles, was Sie verwenden, in einer Liste oder einem Wörterbuch.

+0

Beim Hinzufügen von Bildern ['dsp' + str (i)]. show() ', um die Bilder anzuzeigen, It öffnet das Bild im OS (Windows) Foto Zuschauer. Wie kann ich das im Standard-Python-Fenster ändern? – Sugantharaja

0

Sie können nicht einfach Text zusammenführen, um einen Variablennamen wie diesen leider zu erstellen. Das Problem ist mit dsp+str(i)=, nicht nur str(i).

Wenn Sie unbedingt es auf diese Weise tun, können Sie es globals wie so verwenden tun:

for i in range(0,3):  
    globals()["dsp" + str(i)] = Image.open("L1.jpg") 

print(dsp1) # This will contain something 

Dies ermöglicht es Ihnen, diese Variablen zuzugreifen, als wenn man sich die ‚normale‘ Art und Weise zuerst geschaffen hatte.

Idealerweise sollten Sie Ihre Ergebnisse jedoch eher list zuweisen, statt diskreter Variablennamen.

+0

Sorry für den Downvote aber das ist schrecklich ... ughh :-(Arbeiten bedeutet nicht richtig. –

-2

Das Problem ist, dass Sie versuchen, Variablennamen im laufenden Betrieb zu generieren. Wenn ich Sie wäre, würde ich versuchen, ein Wörterbuch anstelle der Generierung dynamischer Variablennamen zu verwenden. Wenn Sie wirklich dynamische Variablennamen benötigen würde ich für so etwas wie gehen:

aber ich kann es wirklich nicht empfehlen. Benutze einfach ein Dikton!

+0

Noch schlimmer, dass die obige Antwort mit globals() - exec sollte selten verwendet werden - und das ist keiner von denen –

+0

Wie ich schon sagte: Ich empfehle es wirklich nicht.Meine Empfehlung war ein Wörterbuch! – nablahero

+0

Ich denke nur, dass es eine schlechte Idee ist, schlechten Code auf dieser Seite zu geben - viele Leute werden das lesen (nicht nur das OP), und sie werden nicht wirklich verstehen, warum exec so eine schlechte Idee ist, außer in ganz besonderen Umständen. Ich weiß, du hast gesagt, dass du das nicht empfohlen hast, aber ich denke nicht, dass viele Leute, die das lesen, deine Empfehlung bemerken oder verstehen werden. vor allem, wenn Sie keinen Code für die Verwendung eines Wörterbuchs geben. Sie werden einfach Ihr Snippet kopieren und weitergehen. –

2

Sie können einem Operator nicht zuweisen.

Sehen Sie sich Ihre Codezeile:

dsp + str(i) = Image.open("L1.jpg") 

Sie haben dsp + str(i) auf der linken Seite, ein Ausdruck der Summe Operator enthält +. Selbst wenn dies richtig ausgewertet würde, wäre das Ergebnis beispielsweise eine Zeichenfolge wie "dsp1". Sie können keiner Zeichenfolge einen Wert zuweisen.

Und da solche Verwendungen keinen Sinn ergeben, unterstützt Python keine Operatoren auf der linken Seite einer Zuweisung.

Sie möchten einen Variablennamen dynamisch erstellen, anstatt ihn hart zu codieren. Obwohl dies unter Verwendung von exec() möglich ist, wird dringend davon abgeraten, da dies leicht zu Fehlern in Ihrem Code führt, schwer zu lesen und noch schwieriger zu debuggen ist. Es kann sogar ein Sicherheitsrisiko (Code-Injektion) sein, wenn alles, was auf diese Weise ausgewertet wird, nicht vertrauenswürdige Daten wie Benutzereingaben ist.

Was sollten Sie stattdessen ein einfaches list:

dsp = [] 
for i in range(0,3):  
    dsp[i] = Image.open("L1.jpg") # for whatever reason you open the same file 3 times... 

Sie eine Liste erstellen, einfach die eckigen Klammern.Wenn Sie es mit einigen Werten initialisieren wollen, schreiben sie einfach nach innen, durch Kommata getrennt:

my_list = ["zero", 1, 2, "three", 4.5, True] 

Sie Zugriff Elemente einer Liste durch einen Indexwert spezifiziert, wobei 0 für das erste Element Start:

print(my_list[3]) # output: three 

können Sie auch einfach Schleife über alle Elemente einer Liste:

for item in my_list: 
    print(item) 
# output: 
# zero 
# 1 
# 2 
# three 
# 4.5 
# True