[PYTHON] Переменные наружу
От: Senyai Россия http://www.arseniy.net
Дата: 31.07.09 16:53
Оценка:
Приветствую!

Хочу сделать так:

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 мне не подходят. Может кто знает хак на эту тему?
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re: [PYTHON] Переменные наружу
От: Курилка Россия http://kirya.narod.ru/
Дата: 31.07.09 16:58
Оценка: 3 (1) +1
Здравствуйте, 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(), а потом использовать этот словарь? Или хочется сразу "встроить" в локальную область видимости?
Re: [PYTHON] Переменные наружу
От: dotidot Россия  
Дата: 31.07.09 19:27
Оценка: 3 (1) +1
Здравствуйте, Senyai, Вы писали:

S>Понятно, что можно return a,b,c ,но у меня 20-40 переменных. Погуглив ничего путёвого не нашел. Globals мне не подходят. Может кто знает хак на эту тему?

20-40 переменных возвращаемых из функции это сильно. Обычно когда надо много возвращать используют мапу (Spring web mvc, django), но 40 — это уже паталогия ИМХО. Тут надо классы дизайнить, функционал структурировать и данные.
Re: [PYTHON] Переменные наружу
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 31.07.09 22:13
Оценка: +1
Здравствуйте, 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']
The God is real, unless declared integer.
Re[2]: [PYTHON] Переменные наружу
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 31.07.09 22:17
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А зачем что_то_типа_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() по списку, но обломился (пока что).
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.