2015-02-10 44 views
1

我想知道如何使用IPython交互式命名空间中导入模块中的函数中的变量。在iPython交互式命名空间中使用导入模块中的函数变量

我有,我想,所以我将它设置为run_test.py从另一个脚本运行一些示例代码:

def run_test(): 
    a = 5 

if __name__ == "__main__": 
    run_test() 

我导入模块如下,调用函数:

import run_test 
run_test.run_test() 

如何在交互式命名空间中使变量'a'可用?我能做到的唯一方法就是使'a'成为一个全局变量,并直接运行run_test.py而不是导入它并调用函数。

任何指针赞赏。

+1

你不能 - 'a'是'run_test'内的局部变量,只要该函数结束就会被释放。如果你希望'a'在'run_test'之外可用,你需要*做出明确的*(例如''global'')。 – jonrsharpe 2015-02-10 13:06:38

+0

谢谢@jonrsharpe这是有道理的。我想我需要单独运行脚本(execfile?),而不是将它合并到函数中。 – srossy 2015-02-10 13:40:20

+0

你为什么要*能够访问'a'?如果在函数完成后需要该值,则返回它。 – jonrsharpe 2015-02-10 13:41:42

回答

0

我相信这可以通过返回locals然后更新当地人来完成。

def main(): 
    # do things 
    return locals() 

if __name__ == '__main__': 
    new_locals = main() 
    locals().update(new_locals) 

这似乎工作,虽然它感觉像一个黑客,所以也许它不会总是。

一个合理的例子,你需要这个:如果你想访问函数的命名空间中的所有变量,但不希望该函数的变量可以被脚本的其他部分(即其他函数定义)访问。

相关问题