【问题标题】:How to add a function's parameter as a suffix to each variable inside this function?如何将函数的参数作为后缀添加到此函数中的每个变量?
【发布时间】:2019-10-30 07:42:59
【问题描述】:
我正在尝试开发一个函数,它可以创建一个包含许多 Tkinter 对象(标签、按钮、旋转框等)的新选项卡。然后将此功能分配给位于根窗口中的许多按钮(以按钮编号作为功能参数)。我想要做的是通过在原始名称中添加一个作为函数参数的后缀来重命名函数体内的变量。此外,其中一个变量是全局变量(用作计数器)。
var_1 = 0
var_2 = 0
def relay_btn(relay_number):
var_n = 'var_' + str(relay_number)
global var_n
vars()[var_n] = 0 + relay_number
relay_btn(1)
relay_btn(2)
print(var_1)
print(var_2)
因此,我希望分别看到 1 和 2,而不是 0。
【问题讨论】:
标签:
python
variables
tkinter
rename
【解决方案1】:
当您在函数 relay_btn 内调用 vars() 时,您仍然指的是该函数范围内的变量。
这里我用return将它们返回到全局范围并在那里分配变量。
#!/usr/bin/env python3
var_1 = 0
var_2 = 0
def relay_btn(relay_number):
var_n = "var_" + str(relay_number)
return var_n, relay_number
var_n, value = relay_btn(1)
vars()[var_n] = value
var_n, value = relay_btn(2)
vars()[var_n] = value
print(var_1)
print(var_2)
在函数中使用动态生成的变量名来完成这一切并不容易。因为您不能将eval 与分配一起使用。但我希望我能说服您找到一种不同的方法做任何你正在做的事情......这通常被认为是一个坏主意。您是否有理由不能使用旨在存储动态生成的键值关联(如字典)的数据结构?
#!/usr/bin/env python3
d = {}
d["var_1"] = 0
d["var_2"] = 0
def relay_btn(relay_number, d):
d["var_{}".format(relay_number)] = relay_number
relay_btn(1, d)
relay_btn(2, d)
print(d["var_1"])
print(d["var_2"])