如何在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()的语义应该取决于之后会发生什么?! (这是优化还是错误或者什么?)那么有没有办法获得所有非本地名称而不必实际访问它们?
我宁愿不必编写自己的函数(使用inspect或其他)。