如何解决使用脚本中定义的函数在 ipython shell 中设置全局变量
我在 ipython shell 中遇到全局变量问题 我知道全局变量是不好的,但对于这个用例来说很方便, 无论如何,这个问题很有趣。 该错误的简化版本是这样的: 在脚本中定义
Five = 0
def set_five(n=5):
global Five
Five = n
return Five
print(Five)
print(set_five())
print(Five)
并且在 ipython shell 中运行该脚本的输出符合预期
0
5
5
但是,如果我尝试在 shell 中设置全局变量,它会失败
> Five
5
> set_five(10)
10
> Five
5
更令人费解的是python解释器交互模式下没有出现问题,
这是 ipython 启动消息
Python 3.9.5 (default,May 24 2021,12:50:35)
Type 'copyright','credits' or 'license' for more information
IPython 7.20.0 -- An enhanced Interactive Python. Type '?' for help.
任何帮助将不胜感激
谢谢
已解决 正如下面所指出的,问题是 global 指的是模块范围的命名空间,而 ipython 在它自己的模块命名空间中运行。 因此,如果我导入脚本,然后通过点表示法获取其变量,那么它就会执行它应该做的事情
In [63]: import main
In [64]: main.Five
Out[64]: 5
In [65]: main.set_five(10)
Out[65]: 10
In [66]: main.Five
Out[66]: 10
谢谢你! 此外,如果有人知道如何将脚本合并到 ipython 命名空间中,以便执行行为更接近纯 Python 交互模式的执行行为,那将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。