如何使用Python的code.interact获得完整的命名空间?

时间:2017-08-14 14:17:05

标签: python namespaces python-nonlocal

如何在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或其他)。

0 个答案:

没有答案