Недавно я начал конвертировать все мои старшие командные файлы в работу на 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?
Если вы пытаетесь изменить значение number
установите значение по номеру = 1 и измените его снова, выполнив тот же номер = 6
Изменение: я вижу, что вы пытаетесь сделать, лучше не делать этого на Python, и вы должны стараться избегать его по нескольким причинам, но в любом случае здесь пример использования exec
(при условии, что number
равно 1
):
exec("var"+str(number)+"=0")
Что будет работать
var1=0
Как говорится в этом ответе, вы можете просто сделать:
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
и т.д.), 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
Трудно порекомендовать что-нибудь еще, не зная больше о том, что вы хотите сделать.