2012-04-02 15 views
2

Ich bin in Python und ....Zurücksetzen von Werten im globalen Array innerhalb einer Funktion python

Ich habe eine kurze Frage. Ich versuche, die Werte eines globalen Arrays durch den Aufruf einer bestimmten Funktion zurücksetzen, habe aber Schwierigkeiten. Hier ist mein Code im Moment:

CHOICES = (('1', 'First'), ('2', 'Second')) 

def set_choices(): 
    global CHOICES 
    CHOICES = (('3', 'Third'), ('4', 'Fourth')) 

Grunde möchte ich, was tun, um die Array-WAHLEN wird zurückgesetzt, indem die Funktion aus einer anderen Funktion aufrufen. Gibt es eine Möglichkeit, das zu tun?

Danke!

+0

Wie ist was Sie wollen anders als das, was Sie bereits geschrieben haben? Ich habe das Gefühl, dass mir etwas fehlt. – Cameron

+0

Hast du deine Funktion 'set_choices()' in deinem Programm aufgerufen? Oder fehlen noch andere Informationen? Und sollten Ihre WAHLEN eine Liste oder ein Set sein? – George

+0

Ja, ich habe set_choices() in meinem ursprünglichen Programm aufgerufen. und ja, es soll ein Set sein. Was ich tue, ruft set_choices() in einer Funktion auf. Dann importiere ich in einer anderen Datei das Array CHOICES. Wenn ich set_choices in der ersten Funktion aufrufen und dann das Array in die nächste importieren, wird die Änderung nicht wirklich übertragen ... –

Antwort

3
myObject = [('1', 'First'), ('2', 'Second')] 
CHOICES = set(myObject) 

def set_choices(): 
    global CHOICES 
    CHOICES.clear() # Remove the element from set CHOICES 
    # Do some of your changes here 
    anotherObject = [('3', 'Third'), ('4', 'Fourth')] 
    CHOICES[:] = set(anotherObject) 


print(CHOICES) # Before calling set_choices 
set_choices() 
print(CHOICES) # After you calling set_choices 

Ich denke, das wird funktionieren. Aber ich weiß nicht, ob die Verwendung von Set und Tupel eine gute Idee ist, ich persönlich würde Ihnen vorschlagen, stattdessen die Liste zu verwenden. Gibt es einen besonderen Grund, ein Set anstelle von anderen Optionen zu verwenden?

Ausgang:

{('2', 'Second'), ('1', 'First')} 
{('4', 'Fourth'), ('3', 'Third')} 

Respond auf Ihren Kommentar Liste zu verwenden:

CHOICES = [['1', 'First'], ['2', 'Second']] 

def set_choices(): 
    # Changed since the comment of another member aaronasterling 
    # Removed the use of global 
    CHOICES[:] = [['3', 'Third'], ['4', 'Fourth']] 

print(CHOICES) 
set_choices() 
print(CHOICES) 

Ausgang:

[['1', 'First'], ['2', 'Second']] 
[['3', 'Third'], ['4', 'Fourth']] 

Um mehr über slice Zuordnung zu erfahren, diese SO question & answer überprüfen.

+0

Ich denke, ich meinte eine Liste. Aber ich habe es gerade auch als Array ausprobiert und es hat auch nicht funktioniert:/ –

+0

funktioniert vielen Dank! –

+0

Gern geschehen! – George

1

Wenn Sie dies mit einer Liste tun möchten, ist das Schlüsselwort global nicht erforderlich.

CHOICES = [('1', 'First'), ('2', 'Second') 

def set_choices(): 
    CHOICES[:] = (('3', 'Third'), ('4', 'Fourth')) 

Dadurch wird der Inhalt der Liste ersetzt, ohne die Referenz zu ändern. Es funktioniert nach Slice-Zuweisung. Die CHOICES[:] verweist auf ein Stück der gesamten Liste.