全局命名空间是否随作用域变化?Spyder调试场景疑问
问题:Spyder调试时全局命名空间不一致的原因
启动文件定义的函数
在Spyder启动文件startup.py中定义了如下函数:
# startup.py #----------- def del_globals(*names): for name1 in names: try: del globals()[name1] except KeyError: pass # Ignore if name1 doesn't exist
调试的脚本内容
在Spyder控制台中通过调试器运行脚本MyScript.py,脚本会在调用函数前创建变量cat:
# MyScript.py #------------ runfile('The/Path/to/startup.py') # In case functions are deleted cat='dog' del_globals('cat')
调试过程中的现象
- 触发断点后:在
del_globals('cat')行设置断点,触发后确认cat存在于全局命名空间:
sorted(globals().keys()) # ['TKraiseCFG', '__builtins__', '__doc__', '__file__', # '__loader__', '__name__', '__nonzero__', '__package__', # '__spec__', 'cat', 'del_globals']
- 单步进入函数后:进入
del_globals函数第一行(for语句处)时,全局命名空间中已无cat:
sorted(globals().keys()) ['TKraiseCFG', '__builtins__', '__doc__', '__loader__', '__name__', '__nonzero__', '__package__', '__spec__', '_spyderpdb_builtins_locals', '_spyderpdb_code', '_spyderpdb_locals', 'del_globals']
疑问
Python中全局命名空间应该唯一且与REPL命令行的命名空间一致,为何会出现上述差异?
内容的提问来源于stack exchange,提问作者user2153235
相关产品推荐
相关产品推荐

