我正在尝试使用一个简单的 try 语句和一个 for 循环语句来初始化以前未定义的变量列表。
这是我写的代码:
for i in ['var1', 'var2', 'var3']:
try:
i
except NameError:
i = []
它不像我期望的那样工作。运行它后,如果之前没有定义这些变量,我想要 var1 = []、var2=[] 和 var3=[]。
这里有更多关于我要完成的任务的详细信息。计划任务应该每 60 秒运行一次,我想跟踪进度:
def run_schduled():
for i in ['var1', 'var2', 'var3']:
try:
i
except NameError:
i = []
var1.append(random.randint(0,100))
var2.append(random.randint(0,100))
var3.append(random.randint(0,100))
schedule.every(60).seconds.do(run_schduled)
while True:
schedule.run_pending()
time.sleep(30)
一种解决方案是使用defaultdict
:
from collections import defaultdict
my_dict = defaultdict(lambda: [])
my_dict['var1'].append(1)
print(my_dict['var1']) # prints '[1]'
print(var1)
但是,这不允许您简单地执行,因为它在您的本地(或全局)命名空间中仍然未定义为标记值。它只会defaultdict
作为键存在于实例中。
另一种选择是使用一个类:
class TaskRunner:
def __init__(self, var1=None, var2=None, var3=None):
self.var1 = var1 or []
self.var2 = var2 or []
self.var3 = var3 or []
def run_scheduled(self):
for i in [self.var1, self.var2, self.var3]:
i.append(random.randrange(1, 10000000))
runner = TaskRunner()
schedule.every(60).seconds.do(runner.run_scheduled)
您还可以使用pickle
保存实例以供稍后加载(即,在您的作业的后续运行中)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句