2015-02-10 46 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) 

這似乎工作,雖然它感覺像一個黑客,所以也許它不會總是。

一個合理的例子,你需要這個:如果你想訪問函數的命名空間中的所有變量,但不希望該函數的變量可以被腳本的其他部分(即其他函數定義)訪問。

相關問題