2010-11-02 6 views
1

У меня есть функция в моей основной программе, которая пытается извлечь информацию из импортированного модуля, который является другим написанным мной сценарием. Этот модуль выплевывает переменную, доступную мне из основной программы, делая ее глобальной.Доступ к локальной переменной в функции из модуля

Однако, поскольку я передаю информацию, запрашивающую информацию, глобальная переменная загрязняется путем добавления информации из отдельных запросов в один var. Я ищу способ доступа к локальной переменной в функции в модуле.

Основная программа:

import module 

def threaded_function(): 
    module.function(var1, var2) 
    print module.output 

Модуль:

def function(var1, var2): 
    global output 
    output = [] 
    DoThingsWithVars(var1, var2) 
    output.append(result) 

Поскольку нарезание резьбы заставляет его получить доступ несколько раз я понял, я бы не использовать глобальные переменные и получить локальные переменные для каждого запроса , Любая идея, как я могу справиться с этим?

+5

Простите мой сарказм, но вы знаете о возвращаемых значениях, не так ли? Почему бы вам просто не вернуть значения, вычисленные вашей функцией вызывающему? –

+0

Как сказал Space_COwbOy, просто верните выходной список из функции. –

+0

", так как я потоковеду функцию, запрашивающую информацию, глобальную переменную" Это ваша проблема. Threading и Globals не могут использоваться вместе. Остановить сейчас. Сделайте что-то другое. –

ответ

2

Ну, единственные случаи, когда func locals имеет смысл - это замыкания и генераторы. Вы можете получить к ним доступ через атрибут __closure__, но вам нужно будет закрывать крышку для каждого отдельного потока, и было бы проще просто передать список ниток-локаторов для работы.

Другим подходом, который на самом деле используется иногда, является наличие локальных глобальных потоков. Прочтите http://docs.python.org/library/threading.html#threading.local для деталей. В вашем случае это будет работать следующим образом:

locs = threading.local() 
def function(var1, var2): 
    global locs 
    if not locs.output: 
     locs.output = [] 
    DoThingsWithVars(var1, var2) 
    locs.output.append(result) 
Смежные вопросы