On 05/26/2015 05:43 PM, richard_riehle wrote:
I realized that I mentioned earlier that I found a solution to my original 
question, but that I never posted an example of the solution.   So, here is a 
simplified example for anyone who is interested.

def fArray(fselect, fparm  = 1):
        def A1(p = fparm):
                if p == 1:
                        print("printing A1[1]")
                else:
                        print("printing A1[other]")
        def A2(p = fparm):
                if p == 1:
                        print("printing A2[1]")
                else:
                        print("printing A2[other]")
        A = [A1, A2]
        A[fselect]()

Nested functions are often confusing and unclear, and there is really no need for them here. This does the same thing:


def A1(p):
    print("printing",  "A1[1]" if p==1 else "A1[other]"))

def A2(p):
    print("printing",  "A2[1]" if p==1 else "A2[other]"))

def fArray(fselect, fparm=1):
    A = [A1,A2]
    A[fselect](fparm)


In this example, I enclosed two functions within another function, and then put 
those two functions in a list.  Then, with appropriate parameters, I called one 
of the functions in the list, associated the formal parameter with the function 
in a call to the array, and presto, it performs the function.

The more advanced problem I wanted to solve, a two dimensional array of 
functions, once this example is understood, becomes trivial to implement.  In 
fact, the more interesting problem I wanted to solve involved a dictionary of 
functions in a two-dimensional array, and that too was easy to do in Python.

When I compare what this would require in C, C++, Java, or most other 
languages, I find Python to be really easy for solving this kind of problem.

Next, I plan to develop the solution using decorators and assertions to empower 
it with a greater level of portability and to make the functions more generic.

I hope someone finds this interesting.

Richard Riehle, PhD



--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to