1

In meiner Python-Funktion möchte ich (lesen, abfragen (if-Anweisung prüfen) und dann andere Anweisungen ausführen) auf eine globale Variable innerhalb einer Funktion. Dazu muss ich innerhalb der Funktion die Variable als global deklarieren. Ich möchte die Funktion eine Variable übergeben dann verwenden Sie die übergebene Variable, um die richtige globale Variable als global zu deklarieren.Globale Variablen deklarieren von übergebenen Variablen innerhalb einer Funktion in Python

current_data_list = [] 
current_data_list_length = len(current_data_list) 

#the list is filled with each line from a file 

def listtousable(listname): 
    local_list_name = listname 
    local_list_length = local_list_name + "_length" 

    global local_list_name 
    global local_list_length 

    if local_list_name[0] == "firstlinevariable": 
     local_list_length = len(local_list_name) 
     print local_list_length 
    else: 
     print "wtf" 
#fill into list 
listtousable("current_data_list") 

Jede Hilfe wäre sehr geschätzt :)

+0

Globals sind in der Regel eine schlechte Idee - sie machen es schwieriger, Fehler in Ihrem Programm zu lokalisieren. Können Sie beschreiben, was Sie damit eigentlich erreichen wollen? Es gibt fast sicher einen besseren Weg, es zu tun. –

+0

Ich benutze globale Variablen, um einen globalen Zustand zu erhalten, in dem das Programm ist und als temporäre Speicherdaten, um dann in die korrekte Textdatei (bekannt aus dem Zustand) zu schreiben, sobald dies erledigt ist. – thedragonmaster

Antwort

0

Der Kommentar von Hugh ist richtig, aber wenn Sie wollen immer noch, dass Sie tun:

exec('global ' + var_name_from_list) 

docs anzeigen here für Python 3.6

EDIT

für Python 2.7 sehen here

+1

Könntest du bitte den Python 2.7 gleichwertig verlinken, wäre das toll. – thedragonmaster

0

Sie brauchen nicht den globalen Zustand var in Ihrer Funktion zu schaffen; Sie können nur den Wert

program_state = "processing" 

state_files = { 
    "loading": "loading.txt", 
    "filtering": "filtered.txt", 
    "processing": "process_data.txt", 
    "done":  "final.txt" 
} 

def processing_function(data): 
    global program_state 
    program_state = "processing" 
    output_file = state_files[program_state] 
+0

Mit Status meinte ich ein fast "Verständnis" der Textdatei (zB erste Zeile bedeutet, dass jedes Objekt in der Textdatei 3 Werte hat, dann für (len -1)/Objektlänge der Datei/now-Liste, die aktuell hat ausgewählt wurde, um dann mehr Listen mit (Name) + iteriertem Wert als Name und 3 Werten innerhalb der Liste zu erstellen, dann kann ich auf ein spezifisches Objekt innerhalb der Datei mit Namen zugreifen + iter-val-needed [0/1/2], do was auch immer durch ui die Datei Daten als Liste verwenden und dann schreiben Sie die Daten auf was auch immer ich Änderungen an der Liste/Daten. So scheint eine dynamische Code-Ausführung wie das, was ich brauche. – thedragonmaster

+0

Ihre Erklärung macht mich nur verwirrter! die ersten 10 Zeilen einer Beispieldatei? Vielleicht sollten Sie darüber nachdenken, eine Datenbank wie sqlite zu verwenden, anstatt zu versuchen, diese in eine flache Datei zu schüren? Der Versuch, "dynamische Codeausführung" über variable globale Variablen zu implementieren, klingt wie fünf Arten von Kopfschmerzen einmal –

+0

nein dou Ich werde Sqlite 3 in der Zukunft meines Projekts verwenden, aber zu Lernzwecken könnte ich auch flache Dateien verwenden können. Datei-Variable Eltern-Standort Eltern-Name Kind-Name Kind-Standort Kind-Beschreibung child2-name child2-Standort child2-Beschreibung – thedragonmaster

Verwandte Themen