每次代码运行时重命名一个变量(python)?



我有一段python代码,它被设置为按时间表运行。(我认为我的问题是一样的,如果它是在一个循环。)

假设在最基本的形式中,代码片段看起来像这样:
A = 1
B = 2
renameMe = A + B

假设调度程序每5分钟运行一次相同的代码片段。变量A &每次代码运行时,B都不同,但操作renameMe = A + B总是相同的。

A &B是从每5分钟更新一次的数据框中抓取出来的,所以我事先不知道它们是什么,但如果我需要事先处理它们而不是将它们分配给a &B马上,我可以。

我最近发现,为了其他事情的工作,我需要能够重命名变量renameMe每次代码片段运行。换句话说,我希望变量的名称在代码片段第一次运行时为renameMe1,然后在5分钟后运行时为renameMe2,依此类推。

变量的名称以何种方式改变(int, strs,等等)并不重要,只要我能够找到新的变量名称是什么,并在其他地方使用它。

DoNOT使用变量变量名,你会有问题,使用容器:

列表:

# first time
container = []
# each loop/run
container.append(A+B)
## last value
container[-1]

字典:

# first time
container = {}
# each loop/run
container['new_id'] = A+B
# access arbitrary value
container['my_previous_id']

如果您需要持久性,请使用平面文件或数据库。

我认为使用一个类使setattr可以使用是合适的:

class newVal:
def __init__(self):
self.n = 1
def addVal(self, a, b):
setattr(self, f”val{self.n}”, a+b)
self.n += 1
Values = newVal()
Values.addVal(a, b)

Values.val1现在被赋值为

我同意Mozway所说的变量名称可能会导致问题,但这也是您可以严格的事情。管理。

globals()以2元组集合的形式存储所有变量的名称和值,如下所示:

dict_items([('__name__', '__main__'), ..., ('thisName', 'renaMe1'), ('renaMe18', 10)])

所以你应该注册你的新变量名但是要注册而不是忘记删除前一个,以避免超载。

如果你遵循a natural law of equal births and deaths,你将避免人口过剩。

我建议你写这段代码(里面有注释):

basename = 'renaMe'
def varUpdate():
# Get previous variable name
thisName = [i for i, j in globals().items() if i[:len(basename)] == basename][0]
# Define the new variable name
newName = basename + '%d'%sum([int(thisName[len(basename):]), 1])
# Register the new variable name
globals()[newName] = globals()[thisName]
# Delete previous variable name from global
del globals()[thisName]
def process(i):
# Isolate from process content for readibility
varUpdate()
# PROCESS BELOW
# ....
newVar = [i for i, j in globals().items() if i[:len(basename)] == basename][0]
print(newVar, " : ", globals()[newVar])

# With this for` loop we simulate 4 entries in process
for i in range(4):
### we enter in the process
process(i)

在shell中测试

首先重新启动您的shell,让我们假设我们在开始有renaMe12 = 12:

>>> renaMe12 = 12
>>> Proposed Script ...

结果

变量的名称在每次迭代中递增。

renaMe13  :  12
renaMe14  :  12
renaMe15  :  12
renaMe16  :  12

如果你现在检查shell,你可以看到在迭代结束时,renaMe12renaMe15不再存在。

只存在值为12的变量renaMe16

>>> renaMe16
12
>>>> renaMe15
Retraçage (dernier appel le plus récent) : 
Shell Python, prompt 4, line 1
builtins.NameError: name 'renaMe15' is not defined

结论

这个讨论只是为了实验,但如果我是你,我会尽我所能避免这种代码复杂化,除非有必要。我同意Mozway,当你认为你应该避免疼痛头痛…

相关内容

  • 没有找到相关文章

最新更新