#python #variables #scope
#python #переменные #область видимости
Вопрос:
Допустим, у меня есть список my_list = [‘a’,’b’,’c’] и у меня есть набор значений my_values = [1,2,3]
Есть ли способ выполнить итерацию по моему списку и установить значения my_list равными my_values
for i in range(len(my_list)):
## an operation that instantiates my_list[i] as the variable a = my_values[i]
...
>>> print a
1
Я просто хочу сделать это, не копируя текст файла, в котором содержится программа, в новый файл, вставляя новые строки в виде строк, куда они должны идти в программе. Я бы хотел пропустить операции создания, переименования, уничтожения, файла, если это возможно, поскольку я имею дело с довольно большими наборами материалов.
Комментарии:
1. не делайте этого. вы пожалеете об этом. используйте dict .
2. Спасибо за предупреждение @Eevee. Я знаю, это кажется супер глупым, но это не для профессионального проекта, и он будет очень надежно изолирован.
Ответ №1:
Вероятно, это халтура, которую вам не следует делать, но поскольку в globals() dict есть все глобальные переменные, вы можете добавить их в глобальный dict для модуля:
>>> my_list = ['a','b','c']
>>> my_values = [1,2,3]
>>> for k, v in zip(my_list, my_values):
... globals()[k] = v
...
>>> a
1
>>> b
2
>>> c
3
Но будьте осторожны, лучше не смешивать ваше пространство имен со значениями ваших переменных. Я не вижу в этом ничего хорошего.
Я рекомендую вместо этого использовать обычный dict для хранения ваших значений, а не загружать их в глобальное или локальное пространство имен.
Комментарии:
1. Это потрясающе! Полностью работает. Это избавило меня от такой большой головной боли. Также не знал, что глобальные переменные также были сохранены таким образом. Это круто, я могу даже просто «удалить глобальные [key]», когда закончу со своей переменной. Я обязательно вернусь и проголосую за вас, когда наберу более 15 репутации.
2. Я же говорил, что вернусь!