如何在python中更新全局变量

Vai*_*wal 6 python global function list

在python中,我有一个函数返回网站上最新链接(到文件夹)的列表.我还有另一个从这些文件夹下载最新文件的功能.我计划每天运行这个脚本.我有一个全局列表,其中包含下载功能每次运行最新文件夹时访问的文件夹链接.我想每五天更新一次全局列表,并在接下来的5天内保持静态,我会运行代码,直到它再次更新.

它有点像这样:

list = ["link1", "link2",...]

def update():
  #code to update list
  return list

def download(list):
  #code to download from links
Run Code Online (Sandbox Code Playgroud)

所以我希望更新功能每5天运行一次(我知道该怎么做)以及每天运行的下载功能.那么如何将update()static返回的列表作为全局列表保留,直到它再次更新为止?

编辑:让我试着澄清一下:

我在星期一运行这个:

list = ["link1", "link2"]

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

def download(list):
  #code to download from links
Run Code Online (Sandbox Code Playgroud)

这工作正常,列表已更新并在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
Run Code Online (Sandbox Code Playgroud)

我重新启动了我的代码,但现在列表中没有来自星期一的link3.如何在接下来的5天内将link3保留在列表中,直到我再次更新列表?

谢谢

Ash*_*ary 12

使用global声明.但是global,如果您在原地修改它们,则不需要可变对象.

您可以使用模块pickle将列表存储在文件中.您可以在要使用时加载列表,并在进行修改后将其存储回来.

lis = ["link1", "link2",...]

def update():
  global lis
  #do something
  return lis
Run Code Online (Sandbox Code Playgroud)

泡菜示例:

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
Run Code Online (Sandbox Code Playgroud)

为了获得更好的性能,您还可以使用cPickle模块.

更多例子