wie aktualisieren von globalen Variablen in python
In python, habe ich eine Funktion zurückgibt, die eine Liste der neuesten links(Ordner) auf eine website. Ich habe auch eine andere Funktion, die den Download der neuesten Dateien aus diesen Ordnern. Ich Plane, dieses Skript ausführen Alltag. Ich habe eine Globale Liste mit den Ordner-links, die den download-Funktion zugreift, jedes mal wenn es ausgeführt wird, für den aktuellen Ordner. Ich möchte zu aktualisieren, dass die Globale Liste, die alle fünf Tage und halten es statisch für die nächsten 5 Tage habe ich den code ausführen, bis es wieder updates.
Seine Art wie diese:
list = ["link1", "link2",...]
def update():
#code to update list
return list
def download(list):
#code to download from links
So, ich möchte die update-Funktion, die alle 5 Tage(ich weiß, wie das geht) und die download-Funktion, um jeden Tag laufen. Also, wie kann ich halten die zurückgegebene Liste von update() static, wie die Globale Liste, bis es wieder aktuell?
BEARBEITEN:
Lassen Sie mich versuchen zu klären:
Ich dieses auf einen Montag:
list = ["link1", "link2"]
def update():
#code to update list
return list #--> list = ["link1", "link2", "link3"]
def download(list):
#code to download from links
dies funktionierte gut, die Liste wurde aktualisiert und verwendet in der download - ().
Ich führen dies auf einen Dienstag:
list = ["link1", "link2"]
#update() won't run today, only runs every 5 days
def update():
#code to update list
return list #--> list = ["link1", "link2", "link3"]
def download(list):
#code to download from links
Neu gestartet ich mein code, aber jetzt nicht link3 vom Montag. Wie halte ich link3 in der Liste für die nächsten 5 Tage bis ich update-Liste wieder?
Dank
InformationsquelleAutor Vaibhav Aggarwal | 2013-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
global
- Anweisung. Aber es gibt keine Notwendigkeitglobal
für veränderliche Objekte, wenn Sie Sie zu ändern.Können Sie Module verwenden, wie
Gurke
speichern Sie Ihre Liste in eine Datei. Sie können die Liste zu laden, wenn Sie es verwenden möchten, und speichern Sie es wieder tun, nachdem Sie Ihre änderungen.Pickle Beispiel:
Für eine bessere Leistung können Sie auch die cPickle Modul.
Weitere Beispiele
Ich denke, Sie müssen die Module verwenden, wie Gurke, speichern Sie Ihre Liste-Objekt, siehe meine aktualisierte Antwort.
Ich habe eine Gurke verwandten Beispiel.
vielen Dank, ich habe mich entschieden, Gurke seit mehr effecient
Gehen Sie zur cPickle dann, es kann bis zu 1000 mal schneller als
pickle
.InformationsquelleAutor Ashwini Chaudhary
Normalen Deklaration der Variablen machen es lokal.
Global-Schlüsselwort verwenden, um es zu Rendern wie global.
Schreiben Sie einfach die Liste in eine Datei und Lesen Sie es von dort später.
Wenn Sie nicht wollen, um selbst den code ausführen, können Sie einen cron-job, um es für Sie tun.
ich habe geschrieben, einfach Lesen, code schreiben.hoffe, das hilft.
InformationsquelleAutor rocker_raj
Solange es deklariert ist im Hauptprogramm und nicht in den scope der Funktion, die Sie sollten in Ordnung sein, um zu manipulieren
list
variable von dort (Ihr Kommentar) einfach nur gut. Wenn Sie möchten, initialisieren Sie es als global zu von im Rahmen einer Methode, die Sie verwenden können, dieglobal
- Schlüsselwort zu erweitern, um das ganze Programmangefügt werden link25 zu der globalen Liste, wie Sie wollte
Wenn Sie möchten, dass Ihre Liste, beharrlich zu sein zwischen läuft, können Sie es speichern in eine Datei und laden Sie es aus, die Datei jedes mal, oder speichern Sie in einer Datenbank und laden Sie es aus einer Datenbank, wenn Sie es brauchen, um die Arbeit auf mehrere Maschinen
schreiben Sie die Elemente Ihrer Liste, um eine Datei auf diese
Quelle
InformationsquelleAutor Stephan