Python 假设变量是本地的
Python Assumes Variable is Local
首先我会说这是一项作业,所需的行为不在我的控制范围内。我正在创建一个名为 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>
这是 运行ning 程序的结果:
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
这里发生了两件事:
Python 所谓的“全局”并不是真正的全局,它是 module-level(即在模块命名空间中)。因此,当您 运行 file_to_dict
时,station_dict
在 globaltest
的命名空间中设置,尽管该命名空间未绑定(即未导入),因此 station_dict
是无法访问。要访问它,您可以这样做:
import globaltest
globaltest.station_dict
IPython's %run
运行s 解释器命名空间中的代码。
就是说,我不知道如何实现你想要的。据我所知,一个函数不能在它的调用命名空间中设置变量,尽管它可能通过进入像 inspect
.
这样的 hacky 东西来实现。
如果有帮助,您可以阅读 sharing variables between modules。
首先我会说这是一项作业,所需的行为不在我的控制范围内。我正在创建一个名为 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>
这是 运行ning 程序的结果:
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
这里发生了两件事:
Python 所谓的“全局”并不是真正的全局,它是 module-level(即在模块命名空间中)。因此,当您 运行
file_to_dict
时,station_dict
在globaltest
的命名空间中设置,尽管该命名空间未绑定(即未导入),因此station_dict
是无法访问。要访问它,您可以这样做:import globaltest globaltest.station_dict
IPython's
%run
运行s 解释器命名空间中的代码。
就是说,我不知道如何实现你想要的。据我所知,一个函数不能在它的调用命名空间中设置变量,尽管它可能通过进入像 inspect
.
如果有帮助,您可以阅读 sharing variables between modules。