2017-04-19 8 views
1

Python noob hier so verzeihen Sie mir, wenn ich eine einfache Frage habe. Ich möchte den Variablennamen auf den Wert setzen, den ich mit meiner for-Schleife übergebe.Verketten Variable auf Variable

roles = ["A" , "B" , "C"] 
for role in roles: 
    print (role) 
    "outPutFor"+role = function_that_gives_outputforRole(role) 

Deshalb möchte ich meine Variablen outPutForA, outPutForB und outPutForC zu lesen.

aber ich bin immer die unten ERROR

"outPutFor"+role = function_that_gives_outputforRole(role) 
     ^
SyntaxError: can't assign to operator 

Was ich hier fehlt?

+0

Der Fehler weist auf das Problem hin. Siehe http://stackoverflow.com/questions/8956825/syntax-error-cant-assign-to-operator. – sgrg

+2

Wahrscheinlich möchten Sie das nicht tun, vermutlich ist es besser, ein Wörterbuch "outPutFor" zu haben und 'outPutFor [" A "]' wie 'outPutForA' zu verwenden. Auf diese Weise können Sie auch einfach alle Möglichkeiten iterieren usw. – 098799

+1

Sie können den * Namen * einer Variablen nicht 'berechnen'. Sie können nur den 'Inhalt' einer Variablen berechnen. Deshalb sollten Sie die Logik in Ihrer Schleife verallgemeinern. "outPutForA" ist die "Ausgabe" in der ersten Iteration (wenn 'role' auf' 'A'' gesetzt ist). Daher sollten Sie 'output =' outPutFor '+ role' oder 'output =' outPutFor '+ function_that_gives_outputforRole (role) 'setzen. – mhoff

Antwort

1

Sie konnten keine dynamisch benannten Variablen erstellen. Aber Sie könnten einen Python dict wie

roles = ["A" , "B" , "C"] 
outputs = {} 
for role in roles: 
    print (role) 
    outputs["outPutFor"+role] = function_that_gives_outputforRole(role) 

verwenden oder ein dict mit Elementen aus ‚Rollen‘ Liste als Schlüssel erstellen. Wie

roles = ["A" , "B" , "C"] 
outPutFor = {} 
for role in roles: 
    print (role) 
    outPutFor[role] = function_that_gives_outputforRole(role) 
    print(outPutFor[role]) 
+1

Warum verwenden Sie 'outputs.update ({key: value})' anstelle der normalen 'outputs [key] = value'? – khelwood

+1

@khelwood Vielen Dank für Ihren Kommentar. Ja, 'outputs [key] = value' ist eine bessere Lösung. Ich habe meinen Beitrag bearbeitet. – kvorobiev

1

Wenn Sie einen Weg nun die output jede Iteration dieser Funktion zu speichern, können Sie erstellen ein listresults genannt, zum Beispiel, und for each role in roles, können Sie die Ausgabe von function_that_gives_outputforRole in die insert/assignresults Liste.

Beispiel:

roles = ["A" , "B" , "C"] 
results = [] 
for i, role in enumerate(roles): 
    results[i] = function_that_gives_outputforRole(role) 

In diesem Beispiel können Sie den Ausgangswert für jede Rolle Zugriff wie folgt aus:

results[0] = function_that_gives_outputforRole("A") 
results[1] = function_that_gives_outputforRole("B") 
results[2] = function_that_gives_outputforRole("C") 

Sie können auch eine dict Struktur verwenden, um jede Ausgabe zu speichern, wie in kvorobiev's answer angegeben.

Wenn Sie möchten, können Sie diese beiden Listen in eine einzige Liste zip(), um die Eingabe/Ausgabe-Werte zu konsolidieren.