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,
| ||||
|