您可以使用 getattr 调用范围内的函数吗?
can you use getattr to call a function within your scope?
我正在尝试做类似的事情,但我不知道如何调用函数 bar
。
def foo():
def bar(baz):
print('used getattr to call', baz)
getattr(bar, __call__())('bar')
foo()
请注意,这有点不寻常。通常你会有一个对象并获得一个属性,它可以是一个函数。那么就很容易运行了。但是,如果您在当前范围内只有一个函数怎么办 - 如何在当前范围内对 运行 函数执行 getattr?
你很接近。要使用 getattr
,请传递属性 name 的字符串值:
getattr(bar, "__call__")('bar')
即
def foo():
def bar(baz):
print('used getattr to call', baz)
getattr(bar, "__call__")('bar')
foo()
输出:
used getattr to call bar
或者,您也可以使用 locals()
函数,其中 returns 局部符号字典:
def foo():
def bar(baz):
print('used getattr to call', baz)
locals()['bar']('pouet')
foo()
它还允许您通过函数的名称而不是其引用来获取函数,而无需自定义映射。
我正在尝试做类似的事情,但我不知道如何调用函数 bar
。
def foo():
def bar(baz):
print('used getattr to call', baz)
getattr(bar, __call__())('bar')
foo()
请注意,这有点不寻常。通常你会有一个对象并获得一个属性,它可以是一个函数。那么就很容易运行了。但是,如果您在当前范围内只有一个函数怎么办 - 如何在当前范围内对 运行 函数执行 getattr?
你很接近。要使用 getattr
,请传递属性 name 的字符串值:
getattr(bar, "__call__")('bar')
即
def foo():
def bar(baz):
print('used getattr to call', baz)
getattr(bar, "__call__")('bar')
foo()
输出:
used getattr to call bar
或者,您也可以使用 locals()
函数,其中 returns 局部符号字典:
def foo():
def bar(baz):
print('used getattr to call', baz)
locals()['bar']('pouet')
foo()
它还允许您通过函数的名称而不是其引用来获取函数,而无需自定义映射。