Is it possible to forward-declare a function in Python?

Is it possible to forward-declare a function in Python? I want to sort a list using my own cmp function before it is declared.

print "\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)])

I’ve organized my code to put the definition of cmp_configs method after the invocation. It fails with this error:

NameError: name 'cmp_configs' is not defined

Is there any way to “declare” cmp_configs method before it’s used? It would make my code look cleaner?

I assume that some people will be tempted to tell me that I should just reorganize my code so that I don’t have this problem. However, there are cases when this is probably unavoidable, for instance when implementing some forms of recursion. If you don’t like this example, assume that I have a case in which it’s really necessary to forward declare a function.

Consider this case where forward-declaring a function would be necessary in Python:

def spam():
    if end_condition():
        return end_result()
    else:
        return eggs()

def eggs():
    if end_condition():
        return end_result()
    else:
        return spam()

Where end_condition and end_result have been previously defined.

Is the only solution to reorganize the code and always put definitions before invocations?

17 Answers
17

Leave a Comment