1

例如,在 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() 的语义应该如何取决于它之后发生的事情?!(这是优化还是错误或什么?)那么有没有办法获得所有非本地名称而无需先访问它们?

我宁愿不必编写自己的函数(使用检查或其他)。

4

0 回答 0