Jupyter Notebook调用test.py的clear函数无法清空全局GRAPH变量怎么办
问题原因
这是Python变量作用域规则导致的问题:
- 你在
clear()函数内执行GRAPH = dict()时,Python会默认将GRAPH识别为函数内部的局部变量,该赋值操作只会创建一个仅在函数内生效的局部字典,并不会修改模块顶层定义的全局GRAPH变量。 - 而
add_to_graph函数之所以能正常修改全局GRAPH,是因为你没有对GRAPH本身做重新赋值,只是修改了它内部的键值对,Python会向上查找作用域找到顶层的全局GRAPH对象进行操作。
解决方法
修改test.py中的clear函数即可,有两种常用实现方案:
方法1:显式声明要修改的是全局变量
def clear(): global GRAPH GRAPH = dict()
加global声明后,函数内的赋值操作会直接修改模块顶层的GRAPH变量,实现清空效果。
方法2:直接调用字典内置方法修改原有对象
字典是可变对象,不需要重新绑定变量名,直接清空原有字典的内容即可,该写法不需要加global声明:
def clear(): GRAPH.clear()
修改完成后,每次在Notebook单元格运行业务代码前先调用test.clear(),就能保证每次运行时GRAPH都是空的,结果可复现。
内容的提问来源于stack exchange,提问作者Sam-gege
相关产品推荐
相关产品推荐

