Приветствую!
Хочу сделать так:
def foo():
a = 1
b = 2
c = 3
return что_то_типа_locals()
def index(request):
возможно_какой_то_метод(foo(request))
print a, b, c # output '1 2 3'
Понятно, что можно return a,b,c ,но у меня 20-40 переменных. Погуглив ничего путёвого не нашел. Globals мне не подходят. Может кто знает хак на эту тему?
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Здравствуйте, Senyai, Вы писали:
S>Приветствую!
S> Хочу сделать так:
S>S>def foo():
S> a = 1
S> b = 2
S> c = 3
S> return что_то_типа_locals()
S>def index(request):
S> возможно_какой_то_метод(foo(request))
S> print a, b, c # output '1 2 3'
S>
S>Понятно, что можно return a,b,c ,но у меня 20-40 переменных. Погуглив ничего путёвого не нашел. Globals мне не подходят. Может кто знает хак на эту тему?
А зачем что_то_типа_locals() если можно просто locals(), а потом использовать этот словарь? Или хочется сразу "встроить" в локальную область видимости?
Здравствуйте, Senyai, Вы писали:
S>S>def foo():
S> a = 1
S> b = 2
S> c = 3
S> return что_то_типа_locals()
S>def index(request):
S> возможно_какой_то_метод(foo(request))
S> print a, b, c # output '1 2 3'
S>
S>Понятно, что можно return a,b,c ,но у меня 20-40 переменных. Погуглив ничего путёвого не нашел. Globals мне не подходят. Может кто знает хак на эту тему?
А зачем хак-то? Можно заполнить словарь данными и вернуть его. И в качестве словаря годится тот же locals().
А в вызывающей писать
d = foo(request)
print d['a'], d['b'], d['c']
Здравствуйте, Курилка, Вы писали:
К>А зачем что_то_типа_locals() если можно просто locals(), а потом использовать этот словарь?
Ага, я в итоге сказал то же самое другими словами.
К> Или хочется сразу "встроить" в локальную область видимости?
Может, случай более сложный.
У меня есть аналогичное: читается файл — конфиг с определениями переменных, а затем из него данные копируются в рабочие. Вот в таком виде меня устроило:
eg = {}
el = {'parent_locals': locals()}
execfile(config, eg, el)
for newkey, newvalue in el.iteritems():
if newkey == 'executable':
executable = newvalue
elif newkey == 'chdir_to':
chdir_to = newvalue
elif newkey == 'newenv':
for k, v in newvalue.iteritems():
newenv[k] = v
elif newkey == 'master_nodes':
assert isinstance(newvalue, list)
master_nodes = newvalue
[...ну и так далее.]
Можно было бы сделать тотальное копирование в locals() по списку, но обломился (пока что).