全局变量不能在ipython中使用模块函数

时间:2018-05-01 19:51:18

标签: python global-variables ipython

我确定有人已经回复了这个,但我找不到。

我有一个脚本test.py,其存在的唯一目的是将变量var放入全局命名空间中:

def test():
    global var
    var = 'stuff'

以下是使用test.py在ipython中运行%run,然后运行test(),然后尝试访问var时会发生什么。

Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: %run test.py

In [2]: test()

In [3]: var
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-84ddba356ca3> in <module>()
----> 1 var

NameError: name 'var' is not defined

In [4]:

知道发生了什么事吗?或者如何将它一般带入本地命名空间?

2 个答案:

答案 0 :(得分:1)

使用%run -i test.py这将在交互式命名空间中运行它,让您访问全局变量。

In [1]: %run -i test.py

In [2]: test()

In [3]: var
Out[3]: 'stuff'

答案 1 :(得分:1)

%run命令为文件中的全局变量创建单独的命名空间。它还使用执行后文件中定义的所有变量更新IPython交互式命名空间。因此,您可以在脚本中调用该函数,以便在文件完成执行之前创建全局变量:

def test():
    global var
    var = 'stuff'
test()

或使用%run -i

  

-i在IPython的命名空间中运行该文件而不是空文件。如果您正在尝试使用文本编辑器编写的代码,这将非常有用   这取决于交互式定义的变量。