我确定有人已经回复了这个,但我找不到。
我有一个脚本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]:
知道发生了什么事吗?或者如何将它一般带入本地命名空间?
答案 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的命名空间中运行该文件而不是空文件。如果您正在尝试使用文本编辑器编写的代码,这将非常有用 这取决于交互式定义的变量。