Dynamic function calling
Alex Martelli
aleaxit at yahoo.com
Fri Sep 1 10:10:11 EDT 2000
"Olaf Meyer" <olaf.meyer at nokia.com> wrote in message
news:39AFA5D5.399EDC41 at nokia.com...
> I'm wondering if it is possible to call functions just by having access
> to their name in a string value. Something similar to:
>
> def test():
> print "test function"
>
> f = "test"
> apply(f, ())
>
> This does not work of course, because f does not have the right type.
> Is there a way to get a function object from the name (string)?
Isn't this essentially the same function as just posed by "Igor V.
Rafienko" <igorr at ifi.uio.no> ...?
Anyway: the name string by itself does not univocally identify the
function object to be used, but it becomes sufficient if you also
know where to look it up.
Consider, specifically:
def docall(kind, name, dict, *args):
funobj=dict[name]
print "Calling",kind,
return apply(funobj, args)
def foo():
print 'external foo'
def bar():
def foo():
print 'internal foo'
docall('local','foo',vars())
docall('global','foo',globals())
Importing this and calling bar() will give us...:
Calling local internal foo
Calling global external foo
Alex
More information about the Python-list
mailing list