转换“set var%number%= [value]”,其中'number'将值更改为Python脚本

时间:2018-06-17 04:02:11

标签: python

我最近承诺将所有旧的批处理文件转换为在Python 3.6上运行,以允许它们在多个操作系统上运行。在这个过程中我遇到了障碍,我的问题是如何最好地将这些后续批处理命令转换为能够在Python中运行的东西。我已经广泛地环顾四周,这一切都是徒劳的。我愿意接受建议。

set number=1
set var%number%=[some value here]

我已经在Python中尝试了类似的东西:

number = 1
("var"+str(number)) = [some value here]

除此之外,尝试让解释器在我尝试分配之前处理我要分配的变量。

number = 1
var = ("var"+str(number))
(var) = [some value here]

我试图转换第一个方法的原因是程序最初可以将更改值设置为'var1'然后'var2'然后'var3'等。这是批处理中唯一的那些事情吗?文件,而不是像Python这样的语言?

2 个答案:

答案 0 :(得分:1)

就像this answer所说,你可以这样做:

numbers = [1, 2, 3]
for n in numbers:
    exec('var_%d = [20]' % n)
print(var_1) # prints [20]
print(var_2) # prints [20]    
print(var_3) # prints [20]

但是,在该答案中存在反对使用exec的论据,因此您应该考虑使用字典。您可以根据需要定义任意数量的键(var1var2等...)。

if __name__ == '__main__':
    v = {}
    numbers = [1, 2, 3]
    for n in numbers:
        v['var' + str(n)] = 10 # initial value 10
    print(v['var1']) # 10
    print(v['var2']) # 10
    print(v['var3']) # 10

    v['var2'] = 20 # update value to 20
    print(v['var2']) # 20

或者如果您需要更多自定义,可以考虑定义自己的类吗?

class MyVar(object):
    def set(self, number, value):
        setattr(self, 'var' + str(number), value)

if __name__ == '__main__':
    number = 1
    v = MyVar()
    v.set(number , 20) 
    print(v.var1) # prints 20
    v.set(number , 40)
    print(v.var1) # now prints 40
    v.var1 = 50
    print(v.var1) # now prints 50

如果不了解更多关于你想做什么的话,很难推荐别的东西。

答案 1 :(得分:0)

如果您尝试更改number的值,请将值设置为     数字= 1 并通过这样做再次改变它     number = 6

编辑:我看到你要做的事情,最好不要在 Python 中这样做,你应该尝试避免它出于多种原因,但无论如何在这里'使用exec(假设number等于1)的示例:

exec("var"+str(number)+"=0")

哪个会运行

var1=0