Abend
gibt es eine Methode mit dem es möglich ist lokale Variablen zu löschen?
Ich habe in meinem script ca. 100 lokale Variablen und alle händisch mit:
del i, a,s,d,f,g,h
del in, out... usw
zu löschen ist nicht wirklich elegant. da wird es doch eine funktion geben oder?
Unter google find eich nur, dass mit locals() es nicht möglich sei lokale variablen zu löschen.
Gibt es da eine versteckte Funktion/Methode?
Grüsse
Lokale Variablem löschen?
ja sind ja nicht ganz 100. war jetzt nur übertrieben dargestellt. gezählt habe ich sie nicht.
löschen deshalb, um den speicher wieder freizugeben. habe das desöfternen gesehen, dass am ende eines programms, die lokalen variablen gelöscht werden.
löschen deshalb, um den speicher wieder freizugeben. habe das desöfternen gesehen, dass am ende eines programms, die lokalen variablen gelöscht werden.
Hi Ha Ho
Ich vermute mal, daß das eher Programme aus der C-Ecke waren, in denen man sich selbst um die Speicherverwaltung kümmern muß.
Wenn das Programm zu Ende ist, schlägt bei Python ohnehin der Garbage-Collector zu und löscht alles. Das brauchst du auf keinen Fall selbst erledigen.
Wenn das Programm zu Ende ist, schlägt bei Python ohnehin der Garbage-Collector zu und löscht alles. Das brauchst du auf keinen Fall selbst erledigen.
Das mit dem ``del`` könnte auch noch den Grund haben, dass wenn Code auf Modulebene ausgeführt wird, dass dann danach dabei verwendete Namen gelöscht werden, so dass es nicht zu namespace pollution kommt. Von daher kann man schon einmal ein ``del`` in Python-Code sehen, ohne dass da jemand am Werk war, der denkt, man müsste selber den Speicher aufräumen.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
@Trundle: Wenn man so viele Namen in einen Namensraum stopft, dass man die selber ``del``\eten muss, macht man IMHO auch etwas falsch. Insbesondere wenn's auf Modulebene passiert. Das Mittel dagegen ist nicht ``del`` sondern Aufteilen in Funktionen oder Methoden.
Ich meinte damit nicht ein muss, sondern eher, dass man es vielleicht will. Etwa weil man zur Modul-Initialisierung einen Namen braucht, den man später im Modul nicht haben will. Das Modul funktioniert trotzdem wunderbar, wenn man diesen Namen nicht löscht.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
del ist toll...
wenn blub.txt eher größer ist, sollte das mMn schon etwas geschwindigkeit mehr bringen als
Reine Vermutung...
Code: Alles auswählen
with open('blub.txt') as muh:
foo = muh.readlines()
while foo:
print foo[0]
del foo[0]
Code: Alles auswählen
for bar in foo:
print bar
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Falsche Vermutung. Zumindest wird dir `readlines` auf die Fuesse fallen, wenn die Dateien "eher groesser sind", denn beim iterieren ueber Dateiobjekte ist Python lazy und laedt nur das, was benoetigt wird.... hat geschrieben:Reine Vermutung...
Da die Liste bei deinem Vorschlag auch umgeordnet werden muss, wuerde ich eher sagen, dass es langsamer ist.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Wie cofi sagte, gerade bei großen Dateien hat dein Vorschlag eine furchtbare Laufzeit. Listen sind nicht wirklich toll, wenn man ständig das vorderste Element entfernt, da dann jedes mal sämtliche Elemente in der Liste bewegt werden müssen.
Mal ganz anschaulich: Ich hab hier eben eine 200 MiB große Datei angelegt. Direktes Iterieren über das Dateiobjekt braucht keine Sekunde, alles einlesen und mit del das erste Element löschen habe ich jetzt nach zwei Minuten abgebrochen.
Mal ganz anschaulich: Ich hab hier eben eine 200 MiB große Datei angelegt. Direktes Iterieren über das Dateiobjekt braucht keine Sekunde, alles einlesen und mit del das erste Element löschen habe ich jetzt nach zwei Minuten abgebrochen.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Weil es eine echte Liste ist, tritt das Speicherproblem ueberhaupt erst auf. Es geht hier nicht um "echte Listen" oder "Fakes". Eine Funktion gibt immer genau das zurueck, was die Dokumentation sagt.... hat geschrieben:Aber readlines liest schon alle Zeilen in die Liste ein, oder nicht?
Oder ist die Liste nur eine Fake-Liste, die nicht hält was sie verspricht?
In Python 2.x sind das meist "echte" Sequenzen die den ganzen Speicher belegen, den der komplette Inhalt benoetigt.
In Python 3.x sind das meist/defaultmässig sog. "Views" mit anderen Worten Generatoren, die nur das belegen, was momentan benoetigt wird.
Aber auch in Python 3.x gibt `readlines` afair Listen zurueck.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte