Python: 用for循环改变变量后缀

Python: Change variable suffix with for loop

我知道这个问题被问了很多,但我无法with/understand 到目前为止的答案。

我想在 for 循环中更改变量的后缀。

我尝试了 Whosebug 搜索提供的所有答案。但是提问者经常给出的具体代码很难看懂。

所以为了清楚起见,我使用了一个简单的例子。这并不意味着面向应用程序。我只是想了解如何更改后缀。

var_1 = 10
var_2 = 100
var_3 = 1000

for i in range(1,4):
    test_i = var_i + 1
    print(test_i)

预期结果: 创建和打印变量:

test_1 = 11 
test_2 = 101 
test_3 = 1001


预期输出

11
101
1001

错误:var_i 被读取为变量名,没有对 i 进行更改。

与其采用复杂的命名约定,不如尝试使用诸如字典之类的数据结构来构思您的问题。

var={}
var[1] = 10
var[2] = 100
var[3] = 1000

test={}
for i in range(1,4):
    test[i] = var[i] +1

print(test)

如果以某种方式给你 var_1 等作为输入,可以使用 .split("_") 检索索引号并将其用作字典键(它们可以是字符串或值)。


关于使用索引变量名的小解释。如果您刚开始学习编程,有很多理由不使用 evalexec,或 getattr 方法。最简单的是,它效率低下,不可扩展,并且极难在脚本的其他任何地方使用。

如果有更简单的方法,我不会坚持 "best practices",但这是您需要学习避免的事情。我们编写程序以避免必须键入这样的内容。

如果给定 var_2 文本作为起点,那么我会使用字符串解析工具 split 并将字符串转换为值和变量名。

通过使用字典,您可以拥有 1000 个不连续的变量,并简单地遍历它们或分配新的关联。例如,如果您正在做一个实验,并调用您的值 tree_1tree_10 等,那么您将始终无法在代码中输入完整的变量名称,而不是简单地遍历所有条目在名为 tree 的容器中。

这和使用一堆if:else语句赋值有点关系:

# inefficient way -- avoid
if name == 'var_1' then:
    test_1=11
elif name == 'var_2' then:
    test_2=101

直接说就简单多了:

test[i]= var[i]+1

并且这一行适用于任意数量的值。

for i in range(1, 4):
   print(eval('var_' + str(i)))

一步一步:

1) 使您的变量成为字符串:

stringified_number = str(i)

2) 在运行时评估你的表达式:

evaluated_variable = eval('var_' + stringified_number)

我建议在 99.99% 的情况下不要使用 eval。你可以做的是使用内置的 getattr 函数:

import sys
var_1 = 10
var_2 = 100
var_3 = 1000

for i in range(1,4):
    test_i = getattr(sys.modules[__name__], f"var_{i}") + 1
    print(test_i)