как обновить глобальную переменную в python

В python у меня есть функция, которая возвращает список последних ссылок (в папки) на веб-сайте. У меня также есть другая функция, которая загружает последние файлы из этих папок. Я планирую каждый раз запускать этот скрипт. У меня есть глобальный список со ссылками на папки, которые функция загрузки обращается каждый раз, когда она выполняется для последних папок. Я хочу обновить этот глобальный список каждые пять дней и сохранить его в течение следующих 5 дней. Я запускаю код, пока он не обновится.

Это примерно так:

list = ["link1", "link2",...] def update(): #code to update list return list def download(list): #code to download from links 

Поэтому я хочу, чтобы функция обновления запускалась каждые 5 дней (я знаю, как это сделать) и функцию загрузки для ежедневной работы. Итак, как я могу сохранить список, возвращенный из update () static в качестве глобального списка, пока он не будет обновлен снова?

EDIT: Позвольте мне попытаться пояснить:

Я запускаю это в понедельник:

 list = ["link1", "link2"] def update(): #code to update list return list #--> list = ["link1", "link2", "link3"] def download(list): #code to download from links 

это отлично работало, список был обновлен и использован в download ().

Я запускаю это во вторник:

 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 

Я перезапустил свой код, но теперь в списке нет link3 с понедельника. Как сохранить ссылку link3 в списке в течение следующих 5 дней, пока я не обновляю список?

благодаря

3 Solutions collect form web for “как обновить глобальную переменную в python”

Используйте global оператор. Но нет необходимости в global для изменяемых объектов, если вы их модифицируете на месте.

Вы можете использовать модули, такие как pickle чтобы сохранить ваш список в файле. Вы можете загрузить список, когда хотите его использовать, и сохранить его после внесения изменений.

 lis = ["link1", "link2",...] def update(): global lis #do something return lis 

Пример соски:

 import pickle def update(): lis = pickle.load( open( "lis.pkl", "rb" ) ) # Load the list #do something with lis #modify it pickle.dump( lis, open( "lis.pkl", "wb" ) ) #save it again 

Для повышения производительности вы также можете использовать модуль cPickle .

Дополнительные примеры

Обычное объявление переменной сделает его локальным.
Используйте глобальное ключевое слово, чтобы сделать его рендеримым как глобальное.

Просто напишите список в файл и получите доступ к нему, прочитав его позже.

Если вы не хотите самостоятельно запускать код, вы можете использовать cron-job, чтобы сделать это за вас.

 def read_file(filename): f = open(filename).read().split() lis = [] for i in f: lis.append(i) return lis def write_file(filename,lis): f = open(filename,"w") for i in lis: f.write(str(i)+'\n') 

Пока он объявлен в основной программе и не входит в объем функции, вы должны быть в порядке, чтобы манипулировать своей переменной list оттуда (ваш комментарий) просто отлично. Если вы хотите инициализировать его как глобальное, чтобы изнутри метода, вы можете использовать global ключевое слово, чтобы расширить область охвата всей программы

 list = ["link1", "link2",...] def update(): list.append("link25") return list 

добавит ссылку25 в глобальный список, как вы хотели

Если вы хотите, чтобы ваш список был постоянным между прогонами, вы можете сохранить его в файл и загрузить его из этого файла каждый раз или сохранить его в базе данных и загрузить его из базы данных, если вам нужно, чтобы он работал на нескольких машинах

вы можете записать элементы в своем списке в файл, выполнив это

 for item in thelist: thefile.write("%s\n" % item) 

источник

  • создать глобальную функцию в python
  • Python vars () глобальная ошибка имени
  • В Python что такое глобальное утверждение?
  • Глобальные переменные в рекурсии. питон
  • Причина для globals () в Python?
  • Глобальная функция Python, такая как 'print'
  • Python: Почему глобально необходимо только при назначении, а не на чтениях?
  • Почему переменная должна быть объявлена ​​глобальной переменной до ее назначения?
  • Python - лучший язык программирования в мире.