例如,在 Python (v. 3.6) 中执行 code.interact 时,如何访问完整的命名空间,包括非本地名称?
通常建议使用以下解决方案或类似的解决方案:
code.interact(local={**globals(), **locals()})
但是,这不提供非本地名称(从内部函数看到的外部函数的名称)。事实上,即使是内置函数 dir() 在这方面似乎也很有趣:
def f():
x = 1
def g():
print('g:', dir())
# print(x)
g()
print('f:', dir())
在上面的代码中,名称 x 对 dir() 是不可见的,但如果 print(x) 行未注释,则它是可见的。有趣的是 dir() 的语义应该如何取决于它之后发生的事情?!(这是优化还是错误或什么?)那么有没有办法获得所有非本地名称而无需先访问它们?
我宁愿不必编写自己的函数(使用检查或其他)。