如何将函数的参数作为后缀添加到该函数内的每个变量?

2024-09-24 14:37:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试开发一个函数来创建一个包含许多Tkinter对象(标签、按钮、spinbox等)的新选项卡。然后将此函数分配给根窗口中的许多按钮(按钮编号作为函数参数)。我想做的是重命名函数体中的变量,在它们的原始名称中添加一个后缀,这是函数的参数。此外,其中一个变量是全局变量(用作计数器)。你知道吗

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。你知道吗


Tags: 对象函数numbertkintervar标签函数参数按钮
1条回答
网友
1楼 · 发布于 2024-09-24 14:37:47

在函数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"])

相关问题 更多 >