2013-09-20 4 views
0

Я пытаюсь установить локальную переменную в main() из insideFCT(), которая начинается в main():Установить/получить доступ к локальной переменной из функции в функции?

def insideFCT(): 
    print "inside" 
    info = datetime.datetime.now() 
    print info 

def main(): 
    print "starting main" 
    insideFCT() 
    functionThatPrint(info) #for the example functionThatPrint() acts like print() 

main() 

мне нужно найти способ, так что это дает мне:

starting main 
inside 
2013-09-19... 
2013-09-19... 
  • I не может изменять main() (это означает, что я не могу добавить «info = insideFCT()» и добавить возврат к insideFCT())
  • Я не могу использовать глобальные переменные потому что функция будет использовать несколько раз, в то же время (нити)
  • Конечно, это вовсе не о том, чтобы время, datetime.datetime.now() представляет собой вход Я не могу контролировать

Моя идея чтобы найти что-то конкретное для каждого main(), когда они начинаются, сохраните «info» в глобальной dictionnary как globDict[TheThingSpecific]=info, а затем я могу получить его с помощью globDict[TheThingSpecific] в functionThatPrint() (Действительно, functionThatPrint() вызывается той же функцией, что и insideFCT(), поэтому они имеют одинаковые «конкретные вещь ")

Я только что нашел« что-то конкретное », Я искал. Это threading.current_thread()

РЕШЕНИЕ:

  • insideFCT() магазины Информация в globalDict[str(threading.current_thread())]
  • тогда я могу получить доступ к нему в functionThatPrint() использованием той же линии, потому что это тот же самый поток: globalDict[str(threading.current_thread())]
+2

Почему у вас есть эти ограничения? – alecxe

+0

Почему вы не можете передать информацию основному методу? – Rami

+0

@alecxe это часть моего проекта, первое ограничение состоит в том, что main будет создан другими людьми, и я хочу, чтобы он был как можно более простым (даже если «insideFCT» - настоящий беспорядок). И другие, я думаю, я уже объяснил это. – elbajo

ответ

0

Eсть невозможно установить локальную переменную внутри области функции в python извне. Область, к которой принадлежит имя info, определяется в «время компиляции», то есть когда интерпретатор выполняет команду def main().

Поскольку он не связывается с info внутри main(), он считается глобальным или встроенным. Вот и все.

+0

Может быть, но есть способы обойти это, как мое решение (даже если это не самая чистая вещь когда-либо) – elbajo

+0

Итак, что вы хотите, это в основном локализованное хранилище? – Elazar

+0

Да, я не видел этого, но вы правы, все, что мне нужно, - это способ связать мой поток и использовать общие переменные. Имея это в виду, я смотрю вокруг, и я думаю, что «Очередь» - хорошее решение, не так ли? – elbajo

Смежные вопросы