覆盖函数内部的全局变量不适用于 Spyder 4

Posted

技术标签:

【中文标题】覆盖函数内部的全局变量不适用于 Spyder 4【英文标题】:Override global variable inside function not working with Spyder 4 【发布时间】:2020-04-03 21:42:45 【问题描述】:

我尝试从函数中覆盖全局定义的数据框。 不知何故,全局值不会改变,在函数中打印数据帧与预期值一起工作。

import pandas as pd

rawData = pd.read_csv("music.csv")
appTitles =pd.DataFrame #also with pd.DataFrame() wont get affected

def loadTitles(df=rawData):
    global appTitles
    appTitles = pd.DataFrame('Title' : df['title'])
    print(appTitles) 
return appTitles #(second 'print' to screen)

#RUN FILE
#CALL FUNCTION: loadTitles() #-> No Variable appTitles

变量资源管理器中的 appTitles 变量保持为空或不存在(取决于 pd.DataFrame/pd.DataFrame() 的使用)谢谢!

编辑:在@4turkuaz 评论说他的环境一切正常后,我尝试了 Windows cmd 中的 Python 控制台,以及使用 Python 3.7.4 和 IPython 7.8.0 的 Spyder3,一切正常很好。

仅在带有 Python 3.7.5 和 IPython 7.10.1 的 Spyder4 上它不起作用。也许是一个错误?我不知道...

编辑:将 Spyder4 降级到 Python 3.7.4 和 IPython 7.8.0 并没有解决问题。我假设 Spyder4 或 Anaconca 环境中的某些东西,即使我一遍又一遍地安装它也是不正确的。

【问题讨论】:

实际上,它在我的 Python 3.6 环境中按预期工作。 我在 3.7 上使用 Spyder 作为 IDE 你能把它降级到3.6再试一次吗? 刚刚在 windows 上的 python 控制台中尝试过,它按预期工作。很奇怪。 【参考方案1】:

(这里是 Spyder 维护者) 你需要进入菜单

Run > Configuration per file

并激活名为Run in console's namespace instead of an empty one 的选项,以便您能够修改代码中的全局变量。

【讨论】:

非常感谢,激活该选项后,它现在按计划工作,但即使我再次取消选中它。我不知道这是否是想要的行为。

以上是关于覆盖函数内部的全局变量不适用于 Spyder 4的主要内容,如果未能解决你的问题,请参考以下文章

函数不适用于全局变量。应该期待吗?

全局变量 局部变量

访问函数内覆盖的全局变量

访问函数内覆盖的全局变量

局部变量和全局变量

函数作用域小结