up vote 3 down vote favorite | I am trying to pass the name of a function into another function as an argument but I get an error: "TypeError: 'str' object is not callable". Here is a simplified example of the problem:
When I call doIt like so:
I get:
| ||||||||||||||
|
up vote 5 down vote | If you want to pass the function's name, as you said and you're doing, of course you can't call it -- why would one "call a name"? It's meaningless. If you want to call it, pass the function itself, that is, most emphatically not
but rather
without quotes! Edit: the OP wonders in a comment (!) how to get a function object given the function name (as a string). As it happens I just showed how to do that in a tutorial I taught at OSCON (from which I'm just back) -- get the slides from here and see page 47, "Lazy-loading callbacks":
So you could pass | ||||||||
|
up vote 2 down vote | Don't pass the name of a function. Pass the function.
| ||||
up vote 1 down vote |
In this example, | ||||||||||||||||||||||||||
|
up vote 0 down vote | If you have to pass it as a string you can call it with:
| ||||
up vote -1 down vote | Functions are first-class objects in python. Do this:
If you must pass a string, such as user input, then:
will look up the function object. | ||||
up vote 0 down vote | You probably shouldn't do this, but you can get the function using eval() for example, to use len,
| ||||