Shankar
Shankar

Reputation: 417

Call a function by array index in Python

I have an array of functions and I want to call them by their index. However the following code gives me an error(TypeError: 'list' object is not callable)

kFunc = [Row(a,value, row), Col(a,value,col), Gridval(a,value, row, col), Grid(a, value), Rectangle(a, value, row, col)  ]
    k = random.randint(1,4)
    for j in range(k):
        output = kFunc[j]()

Each function returns a value. I tried replacing kFunc[j]() with kFunc[j]. I didn't get any error but all the 5 functions are getting executed.

I found a similar question here but I can't figure out an answer to my question.

I'd appreciate any help. Thanks

Upvotes: 0

Views: 382

Answers (1)

user2390182
user2390182

Reputation: 73460

You probably made a list of the return values already, assuming that Row, Col, etc. are the functions you are talking about. You can do the following to wrap those in functions:

kFunc = [
    lambda: Row(a,value, row), 
    lambda: Col(a,value,col), 
    lambda: Gridval(a,value, row, col), 
    lambda: Grid(a, value), 
    lambda: Rectangle(a, value, row, col)
]

output = kFunc[random.randint(0,4)]()  # will only do one of the lambda-wrapped operations

Upvotes: 2

Related Questions