当变量尚未在 python 中声明时初始化变量

迈赫迪·扎雷

我正在尝试使用一个简单的 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

声明时初始化变量的值

是否应在声明时初始化Java变量?

仅当变量尚未在 Python 中定义时,设置变量的最佳方法是什么?

如何在python中的类定义中声明未初始化的变量

检查Python中的初始化变量

在Python中“初始化”变量?

Python声明变量列表而不初始化它们

如何在 Python 中为未初始化的变量声明类型?

如果在声明时或在构造函数中初始化变量,会有区别吗

变量初始化/声明中的逗号

变量初始化-Python

变量可能尚未在二维数组中初始化

为什么引用变量需要在声明时进行初始化

Python 3中的Python类变量初始化不同

声明与初始化变量?

在Java中,为什么只有在声明时默认情况下才将int变量赋给0,所以才用0初始化int变量?

多变量初始化中使用的绑定运算符仅在变量也在同一行中声明时起作用

变量未在Java中初始化

Python使用初始化文件和默认常量文件中的变量初始化类

Python:无法从初始化文件导入在setUp方法中初始化的全局变量

在Python中添加并初始化枚举类变量

什么时候在Python中初始化类变量?

在Python中初始化字符串变量:“”或“无”?

如何在Python中重新初始化变量?

在python模块中初始化变量的最佳方法

在python和C中初始化变量

循环创建变量并在Python中初始化它们

在 Python 中初始化类变量的快速方法

如果变量在声明时初始化并链接到NOLOAD节,是否有办法引发链接时间错误?