如何通过循环拼接字符串与整数调用对应规则命名的多个变量
问题原因
你拼接得到的'acc1'/'acc2'只是普通字符串,Python不会自动将字符串和同名变量做绑定,你直接操作这个字符串只会得到字符串本身的执行结果,比如原代码里something[0]取的是字符串的首个字符'a',和你预先定义的acc1/acc2列表没有关联。
推荐解决方案(最优实践)
不要拆成多个acc+数字的独立变量,直接用嵌套列表或字典存储所有同规则的数据,从根源上避免动态取变量的需求:
用字典存储(更直观,键对应你的数字后缀)
# 键为原变量的数字后缀,值为对应的列表内容 acc_map = { 1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 2: ["John", "Doe", "Example", "code"] } c = [1, 2] for i in c: something = acc_map[i] print(something[0])
用嵌套列表存储(适合后缀是连续数字的场景)
# 下标对应原数字后缀(注意列表默认从0开始,需要和后缀对齐的话可以在0位补个占位值) acc = [ [], # 占位用,对应不存在的acc0 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ["John", "Doe", "Example", "code"] ] c = [1, 2] for i in c: something = acc[i] print(something[0])
这种方案维护成本最低,不会出现作用域冲突问题,是所有开发场景下的首选方案。
临时兼容解决方案
如果你已经写了大量accN变量不想重构,可以用Python内置的globals()(取全局作用域变量)或locals()(取当前局部作用域变量)函数,通过字符串键名取对应的变量值:
acc1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] acc2 = ["John", "Doe", "Example", "code"] c = [1, 2] for i in c: var_name = 'acc' + str(i) # 全局作用域下用globals(),函数内部的局部变量替换为locals() something = globals()[var_name] print(something[0])
注意该方案只适合临时调试用,正式项目不推荐使用,后续变量增多后极易出现变量名冲突、作用域判断错误等问题,排查成本极高。
内容的提问来源于stack exchange,提问作者Sree
相关产品推荐
相关产品推荐

