Преобразование «set var% number% = [value]», где «number» меняет значение в скрипт Python

1

Недавно я начал конвертировать все мои старшие командные файлы в работу на 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
Лучший ответ

Если вы пытаетесь изменить значение number установите значение по номеру = 1 и измените его снова, выполнив тот же номер = 6

Изменение: я вижу, что вы пытаетесь сделать, лучше не делать этого на Python, и вы должны стараться избегать его по нескольким причинам, но в любом случае здесь пример использования exec (при условии, что number равно 1):

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

Что будет работать

var1=0
  • 0
    Это все, спасибо связкам.
1

Как говорится в этом ответе, вы можете просто сделать:

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

Трудно порекомендовать что-нибудь еще, не зная больше о том, что вы хотите сделать.

  • 0
    Я не мог добавить тонну подробностей о том, что я хочу сделать, потому что у меня есть целая куча разных приложений для этого вопроса, и, честно говоря, я даже не думал о том, чтобы копаться в определении классов и тому подобного. Спасибо за ваши рекомендации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню