2016-12-21 1 views
0

Ich habe mehrere Arrays erstellt und möchte ihnen etwas anhängen, aber der Benutzer sollte wählen, welches Array er anhängen möchte.Python - Anhängen an ein Array, dessen Name durch eine Zeichenfolge angegeben wird

So zu klären, was ich meine: (. Der Code unten unter falsch ist, aber ich weiß nicht, wie ich es schreiben konnte)

x = [] 
y = [] 

def test(pName): 
    %s.append(1) %pName 

test(y) 

Edit:

@ Jim Fasarakis-Hilliard

Ich versuche in PyGame zu programmieren. Dafür muss ich alle Bilder initialisieren, die ich verwenden möchte.

Um es nicht zu erweitern, wollte ich eine Funktion erstellen, die Sie an jedes beliebige Array anhängen können, so dass ich nicht jedes Mal eine neue Funktion erstellen muss, wenn ich neue Bilder initialisieren möchte.

Mein Code sieht wie folgt aus atm .:

def loadImages(self,pName,pAnz,pScaleX,pScaleY): 
    for i in range(0,pAnz): 
     tux = pygame.transform.scale(pygame.image.load('./images/%s.png'),(pScaleX,pScaleY) % pName) 
     self.%s.append(tux) %pName 
    length_array = len(self.%s) %pName 
    return length_array 
+3

hmm, warum verwenden Sie kein Wörterbuch? – danielfranca

+0

Es ist mir wichtig, alles in ein Array zu speichern, da ich Bilder oder Objekte darin speichern muss. – freedome97

+0

@ freedome97 Sie könnten alles in einem Wörterbuch speichern, das Sie in einem Array speichern können;) –

Antwort

1

Wenn alles, was Sie wollen in der Lage ist, Ihre Objekte in verschiedene „Namensraum“ zu speichern, können Sie die Wörterbücher verwenden:

lists = { 
    "x": [], 
    "y": [] 
} 

def test(pName): 
    lists[pName].append(1) 

test("y") 

Reiniger und leichter zu verstehen als IMHO Globals oder similars verwenden.

+0

Wird nicht funktionieren. Sie sollten unterscheiden zwischen 'y', der ein Objekt referenziert, und' y'eine Zeichenkette. – quapka

2

Sie globals verwenden könnte, eine Reihe von Variablennamen an die Funktion übergeben:

def test(pName): 
    globals()[pName].append(1) 

test('y') 

dies natürlich, stützt sich auf die Name, der im globalen Gültigkeitsbereich vorhanden ist.

+0

könnte vielleicht 'einheimisch()' genug sein? –

+0

Und wenn ich es innerhalb einer Klasse verwende, wird es auch funktionieren? weil self.globals() wahrscheinlich einen Fehler verursachen würde. – freedome97

+0

globals() ist ein eingebautes. keine Notwendigkeit für self;) globals() enthält alle globalen Variablen –

2

Sie könnten das Array in ein Wörterbuch einfügen. Unter der Annahme, dass es eine feste Anzahl von Arrays ist, würde der Code wie folgt aussehen:

arrays = {} 
arrays['x'] = [] 
arrays['y'] = [] 

def test(pName): 
    arrays[pName].append(1) 

test('y') 

Sie wollen die Benutzereingabe zu überprüfen, als pName das kein Schlüssel im Wörterbuch enthalten ist eine Schlüssel Ausnahme auslösen . Wenn Sie möchten, dass die Arrays dynamisch sind, können Sie Folgendes tun:

arrays={} 
def test(pName): 
    if pName not in arrays.keys(): 
     arrays[pName]=[] 
    arrays[pName].append(1) 

test('y') 
+0

nicht versuchen/außer dies, wenn Sie wissen, was das Problem sein könnte. 'Wenn pName nicht im Array: ...' ist, dann erstelle das Schlüssel-Wert-Paar. außerhalb des 'if' hängen Sie die' 1' an. Es ist viel sauberer. –

+0

@MatthiasBurger Ich sehe nicht, warum ein 'try-except'-Block in diesem Beispiel nicht gut wäre. Es wird üblicherweise für den Kontrollfluss verwendet und in diesem Beispiel wird erwartet, dass der Benutzer einen bereits existierenden Schlüssel eingibt, und wenn er/sie dies nicht tut, würde dies als eine Ausnahme von dem normalen Fall betrachtet werden. Und da wir nicht jeden String mit "pName" vergleichen müssten, wäre es auch im Normalfall schneller (wenn auch im Ausnahmefall langsamer). Ich würde auch sagen, dass das 'try-except' so sauber war wie das' if', da es zeigte, was zu tun war, wenn es einen Schlüssel gab und was zu tun war, wenn nicht. –

+0

@TedKleinBergman Ich habe nie gesagt, versuchen - außer ist nicht gut hier. Es ist nur eine schlechte Übung, try zu verwenden - außer wenn die mögliche Ausnahme bekannt ist. Es gibt Fälle, in denen Entwickler keinen Ausnahme-Typ eingeben und sie alle im Pokémon-Stil fangen (weil try/exception so einfach ist). vielleicht musste ich "imho" oder so schreiben und ich bin einer von vielleicht 30%, der denkt, wenn/sonst ist besser als versuchen/außer. SOTA soll try-catch mit Fällen verwenden, die Sie nicht mit einem if umgehen können. Wie du geschrieben hast: 'Was tun, wenn es einen Schlüssel gibt und was zu tun ist, wenn nicht ->' if' –

Verwandte Themen