You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

全局命名空间是否随作用域变化?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 05:12:42