是否可以使用globals()
或locals()
之类的名称来访问父函数中通过名称(即,作为字符串)定义的变量?
这两个示例均给出KeyError: 'x'
:
def f():
x = 1
def g():
print(globals()['x'])
g()
def f():
x = 1
def g():
print(locals()['x'])
g()
答案 0 :(得分:3)
是有可能的,但是您正在使用Python,请不要这样做:
In [1]: import inspect
In [2]: def f():
...: x = 1
...: def g():
...: print(inspect.currentframe().f_back.f_locals['x'])
...: g()
...:
In [3]: f()
1
请不要。编写好的代码,而不是不好的代码。对于我们所有人。
答案 1 :(得分:1)
我不确定它是否有用,但是您可以通过检查封闭函数的堆栈框架(即深度1的框架)并从x
字典中获得locals
来做到这一点:
In [1]: import sys
In [2]: def f():
...: x = 1
...: def g():
...: print(sys._getframe(1).f_locals['x'])
...: g()
...:
In [3]: f()
1
答案 2 :(得分:0)
为什么不像这样将值直接传递给子函数:
def f():
x = 1
def g(parameter):
print(parameter)
g(x)