如何使用Python';s代码。交互?
例如,在Python(3.6版)中执行code.interact时,如何访问完整的名称空间(包括非本地名称) 通常建议采用以下解决方案或类似方案:如何使用Python';s代码。交互?,python,namespaces,python-nonlocal,Python,Namespaces,Python Nonlocal,例如,在Python(3.6版)中执行code.interact时,如何访问完整的名称空间(包括非本地名称) 通常建议采用以下解决方案或类似方案: code.interact(local={**globals(),**locals()}) 但是,它不提供非局部名称(从内部函数看到的外部函数的名称)。事实上,就连内置函数dir()在这方面的表现也很有趣: def f(): x = 1 def g(): print('g:', dir()) # pri
code.interact(local={**globals(),**locals()})
但是,它不提供非局部名称(从内部函数看到的外部函数的名称)。事实上,就连内置函数dir()在这方面的表现也很有趣:
def f():
x = 1
def g():
print('g:', dir())
# print(x)
g()
print('f:', dir())
在上面的代码中,dir()看不到名称x,但如果打印(x)行未注释,则名称x可见。有趣的是,dir()的语义应该取决于它之后发生了什么?!(这是一个优化还是一个bug还是什么?)那么有没有一种方法可以在不需要首先访问所有非本地名称的情况下获取它们
我宁愿不必编写自己的函数(使用inspect或其他任何工具)。我也希望得到答案。特别是,有没有一种方法可以像捕获
local()
和global()。特别是,是否有一种捕获非本地
名称空间的方法,类似于捕获local()
和global()
名称空间的方法?