Reputation: 3696
I'm trying to do something like this, but I can't figure out how to call the function bar
.
def foo():
def bar(baz):
print('used getattr to call', baz)
getattr(bar, __call__())('bar')
foo()
Notice, that this is somewhat unusual. Normally you'd have an object and get an attribute on that, which could be a function. then it's easy to run. but what if you just have a function within the current scope - how to do getattr on the current scope to run the function?
Upvotes: 3
Views: 1253
Reputation: 6209
alternatively, you can also use the locals()
function which returns a dict of local symbols:
def foo():
def bar(baz):
print('used getattr to call', baz)
locals()['bar']('pouet')
foo()
It also allows you to get the function by its name instead of its reference without need for a custom mapping.
Upvotes: 3