我正在尝试执行类似的操作,但是我不知道如何调用函数bar
。
def foo():
def bar(baz):
print('used getattr to call', baz)
getattr(bar, __call__())('bar')
foo()
注意,这有点不寻常。通常,您将有一个对象并在该对象上获得一个属性,该属性可以是一个函数。那么它很容易运行。但是,如果您仅在当前作用域内有一个功能,该怎么办-如何在当前作用域内执行getattr来运行该功能?
答案 0 :(得分:3)
您很近。要使用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
答案 1 :(得分:2)
或者,您也可以使用locals()
函数,该函数返回本地符号的字典:
def foo():
def bar(baz):
print('used getattr to call', baz)
locals()['bar']('pouet')
foo()
它还允许您通过函数名称而不是引用来获取函数,而无需自定义映射。