Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 31, 2011 17:31:32

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как просто добавить переменные в локальное пространство имен функции

Надо чтото типа:

def f():
locals()["aa"]=3
Можно сделать?

Контекст:
Есть много функций они пользуются данными из файлов - читают. Файлов тоже многою Лень возится с определением локальных переменных. Хочется в цикле.
def f():
vars="a b c d".split()
for i in vars:
locals()[i]=ReadData(i)



Офлайн

#2 Янв. 31, 2011 17:32:48

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как просто добавить переменные в локальное пространство имен функции

Зачем, боюсь спросить, такое?
Чем уж тогда словари не подходят?



Отредактировано (Янв. 31, 2011 17:33:03)

Офлайн

#3 Янв. 31, 2011 17:35:56

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как просто добавить переменные в локальное пространство имен функции

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



Офлайн

#4 Янв. 31, 2011 17:41:05

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как просто добавить переменные в локальное пространство имен функции

doza_and
В функциях довольно сложные формулы с этими переменными, со словорями будет очень длинно.
то есть
d = {}
d[i] = ReadData[i]
сильно длиннее чем
locals()[i] = ReadData[i]
?
Или я не так понял вопрос?



Офлайн

#5 Янв. 31, 2011 18:05:18

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как просто добавить переменные в локальное пространство имен функции

примерно так:

a=ReadData("a")
b=ReadData("b")
.....
a2345=ReadData("a2345")
сильно длиннее чем
a="a b c .... a2345".split()
for i in a:
locals()[i]=ReadData(i)
а дальше здоровые куски кода:
z=a+b
zz=a+z*34/a2345
.....



Отредактировано (Янв. 31, 2011 18:06:52)

Офлайн

#6 Янв. 31, 2011 18:08:31

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как просто добавить переменные в локальное пространство имен функции

вообщето и “a b c …. a2345” я получаю как glob.glob(“*”)
Ну можно конечно сделать

for i in names:
exec("%s=ReadData('%s')"% (i,i))
но это не очень красиво когда можно сделать globals()=ReadData(i)



Отредактировано (Янв. 31, 2011 18:20:51)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version