我最近承诺将所有旧的批处理文件转换为在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这样的语言?
答案 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
的论据,因此您应该考虑使用字典。您可以根据需要定义任意数量的键(var1
,var2
等...)。
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