Seite 1 von 1
globale variable in funktion verändern ?
Verfasst: Donnerstag 8. Juni 2006, 07:53
von stigi
ich habe 3 globale variablen
nun möchte ich innerhalb meiner funktion diese counter hochzählen - geht das überhaupt ?
Code: Alles auswählen
def runthrough():
def autocorrect():
c_autoedit = c_autoedit + 1
def nocorrect():
c_error = c_error + 1
def manucorrect():
c_manuedit = c_manuedit + 1
also so gehts ja sicher nicht denk ich mal war nur zum veranschaulichen was ich meine
Verfasst: Donnerstag 8. Juni 2006, 08:41
von Michael Schneider
Hallo Stigi,
sicher geht das, aber nicht mit Integer-Variablen, da diese in Funktionen im lokalen Namensbereich neu angelegt werden. Du müsstest sie also entweder über z.B. "global c_error" in der Funktion bekanntmachen, damit in die globale Variable geschrieben wird, oder Du verpackst sie in Objekte, auf die automatisch im globalen Namensbereich zugegriffen wird. Auch da gibt es viele Möglichkeiten:
Ein Dictionary:
Code: Alles auswählen
glob = {"error" : 0,
"autoedit" : 0,
"manuedit" : 0}
def autocorrect(): glob["autoedit"] += 1
def nocorrect(): glob["error"] += 1
def manucorrect(): glob["manuedit"] += 1
## test
nocorrect()
print glob
reicht für die angegebenen Anforderungen aus. Wenn Du es etwas komfortabler gestalten möchtest, kannst Du auch eine Klasse schreiben:
Code: Alles auswählen
class Dummy:pass
glob = Dummy()
glob.c_error = 0
glob.c_autoedit = 0
glob.c_manuedit = 0
def autocorrect(): glob.c_autoedit += 1
def nocorrect(): glob.c_error += 1
def manucorrect(): glob.c_manuedit += 1
Das hat den Vorteil, dass man weitere Methoden hinzufügen kann, z.B. kann man die Hochzählfunktionen als Methoden definieren, so hast Du alles kompakt in einem Objekt.
Ansonsten könntest Du noch die Variablenklasse
IntVar aus dem Tkinter-Modul verwenden, das wird aber wahrscheinlich zu umständlich.
Grüße,
der Michel
Verfasst: Donnerstag 8. Juni 2006, 08:49
von stigi
alles klar vielen dank

Verfasst: Donnerstag 8. Juni 2006, 09:13
von stigi
haber das jetzt mit dem dictionary gelöst, müsste es aber auch noch in eine txt file ausgeben können
mit
Code: Alles auswählen
file.write("\n--------------------------------\n\n" + glob['c_autoedit'])
funktioniert es leider nicht.
fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "Y:\Mitarbeiter\xxx\pythonwin\correct2.py", line 163, in ?
file.write("\n--------------------------------\n\n" + glob['c_autoedit'])
TypeError: cannot concatenate 'str' and 'int' objects
die konvertierung in int mit int(glob['c_autoedit']) funktioniert leider da auch nicht
edit: habs in str konvertiert - so gehts

Verfasst: Donnerstag 8. Juni 2006, 12:17
von Joghurt