iPython假定变量为本地变量



首先我要说这是一个赋值,所需的行为不在我的控制之下。我正在创建一个名为globaltest.py的脚本,如果运行文件或调用文件中的函数,该脚本的作用应该完全相同。我在ipython做这两件事。它应该创建一个名为station_dict的字典,该字典可以在ipython控制台中访问或使用whos命令查看。

from globaltest import file_to_dict
file_to_dict()

这应该在函数运行时生成一个名为station_dict的变量。

以下是当脚本只是运行时的行为:

Run globaltest

这还应该创建一个名为station_dict的字典。

问题是调用和使用函数file_to_dict不会创建变量,而只是运行文件会创建变量。这是我的密码。谢谢你的帮助。

#!//bin/env python3
def main():
global station_dict
station_dict = {}
station_dict['foo'] = 'bar'
def file_to_dict():
global station_dict
station_dict = {}
station_dict['foo'] = 'bar'
if __name__ == '__main__':
main()

以下是由于使用以下功能而导致的不良输出:

Python 3.4.5 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:47:47)
Type "copyright", "credits" or "license" for more information.
IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
In [1]: from globaltest import file_to_dict
In [2]: file_to_dict()
In [3]: whos
Variable       Type        Data/Info
------------------------------------
file_to_dict   function    <function file_to_dict at 0x7f869f39cea0>

以下是运行程序的良好结果:

Python 3.4.5 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:47:47)
Type "copyright", "credits" or "license" for more information.
IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
In [1]: run globaltest.py
In [2]: whos
Variable       Type        Data/Info
------------------------------------
file_to_dict   function    <function file_to_dict at 0x7fb92b7df8c8>
main           function    <function main at 0x7fb92b7df0d0>
station_dict   dict        n=1

这里有两件事:

  1. Python称之为"全局";不是真正全局的,而是模块级的(即在模块命名空间中(。因此,当您运行file_to_dict时,station_dict将在globaltest的命名空间中设置,尽管该命名空间未绑定(即未导入(,因此station_dict不可访问。要访问它,您可以执行以下操作:

    import globaltest
    globaltest.station_dict
    
  2. IPython的%run在解释器的命名空间中运行代码。

也就是说,我不知道如何实现你想要的。据我所知,函数不能在其调用命名空间中设置变量,尽管这可能是通过使用inspect之类的技巧实现的。

如果有帮助,您可以阅读有关在模块之间共享变量的内容。

相关内容

  • 没有找到相关文章

最新更新