Steve Yang
Steve Yang

Reputation: 225

Python function pointer with different arguments

I have defined three functions.

def evaluate1(a, b):
    pass
def evaluate2(a, b):
    pass
def evaluate3(a, b, c):
    pass

What I want to do use a pointer to record which evaluate function I will use depending on the test inputs. The logic is as shown follows:

def test(a, b, c, d):
    # let evaluate_function records which evaluate function I will use
    if c > 1:
        evaluate_function = evaluate3 # not sure
    else:
       if d:
           evaluate_function = evaluate1
       else:
           evaluate_function = evaluate2

    # execute the evaluate function
    evaluate_function(a, b, ?)

However, since evaluate3 has different arguments from evaluate1 and evaluate3. How should I do? Thanks!

Upvotes: 0

Views: 533

Answers (2)

Devesh Kumar Singh
Devesh Kumar Singh

Reputation: 20500

Why not just call the evaluate functions directly instead of assigning them to a function as so. Makes it more readable

def evaluate1(a, b):
    print('evaluate1')

def evaluate2(a, b):
    print('evaluate2')

def evaluate3(a, b, c):
    print('evaluate3')

def test(a, b, c=None, d=None):
    # let evaluate_function records which evaluate function I will use
    if c and c > 1:
        evaluate3(a, b, c)
    else:
       if d:
           evaluate1(a, b)
       else:
           evaluate2(a, c)

test(1,2,c=0.1,d=1)
#evaluate1
test(1,2)
#evaluate2
test(1,2,3)
#evaluate3

Upvotes: 1

quamrana
quamrana

Reputation: 39404

You have come up with a good idea of using a 'function pointer' to select the function. But since you know which function you are selecting at the time, you could also bind up the params:

def test(a, b, c, d):
    # let evaluate_function records which evaluate function I will use
    if c > 1:
        evaluate_function = evaluate3 # not sure
        params = a,b,d
    else:
       if d:
           evaluate_function = evaluate1
           params = a,b
       else:
           evaluate_function = evaluate2
           params = a,c

    # execute the evaluate function
    evaluate_function(*params)

I'll leave it to you to properly select the params.

Upvotes: 1

Related Questions