[Tutor] Dynamic Function Calls

Megan Land mland at us.ibm.com
Fri Aug 14 19:59:05 CEST 2009


                                                                                                   
  From:       Dave Angel <davea at ieee.org>                                                          
                                                                                                   
  To:         bob gailer <bgailer at gmail.com>                                                       
                                                                                                   
  Cc:         Megan Land/Raleigh/Contr/IBM at IBMUS, tutor at python.org                                 
                                                                                                   
  Date:       08/14/2009 01:53 PM                                                                  
                                                                                                   
  Subject:    Re: Re: [Tutor] Dynamic Function Calls                                               
                                                                                                   








bob gailer wrote:
> <div class="moz-text-flowed" style="font-family: -moz-fixed">Megan
> Land wrote:
>>
>> All three methods are defined below the snippet I provided.
>>
>
> In Python names must be defined before they are referenced. Put these
> defs above the snippet.
>
>>
>> def func():
>> code...
>> def func0():
>> do stuff
>> def func1():
>> do stuff
>> def func2():
>> do stuff
>>
>> Megan Land
>> FVT Blade EMET Test Engineer
>> mland at us.ibm.com
>>
>> Inactive hide details for Kent Johnson ---08/13/2009 05:18:10 PM---On
>> Thu, Aug 13, 2009 at 3:30 PM, Megan Land<mland at us.ibm.comKent Johnson
>> ---08/13/2009 05:18:10 PM---On Thu, Aug 13, 2009 at 3:30 PM, Megan
>> Land<mland at us.ibm.com> wrote: > Hi,
>>
>>
>> From:
>> Kent Johnson <kent37 at tds.net>
>>
>> To:
>> Megan Land/Raleigh/Contr/IBM at IBMUS
>>
>> Cc:
>> tutor at python.org
>>
>> Date:
>> 08/13/2009 05:18 PM
>>
>> Subject:
>> Re: [Tutor] Dynamic Function Calls
>>
>> Sent by:
>> kent3737 at gmail.com
>>
>> ------------------------------------------------------------------------
>>
>>
>>
>> On Thu, Aug 13, 2009 at 3:30 PM, Megan Land<mland at us.ibm.com> wrote:
>> > Hi,
>> >
>> > I'm trying to call a function from a dictionary. I did some
>> googling and
>> > from what I can tell my code should work, but doesn't. Here's an
>> example:
>> >
>> > def myFunc(self, inputList):
>> > dict={0: func0, 1: func1, 2:func2}
>> > for element in inputList:
>> > dict[element]()
>> >
>> > When I go to run this I get an error saying func0 is not defined. Does
>> > anyone have any ideas as to why this won't work? I'm using Python
>> 2.6 if
>> > that makes any difference.
>>
>> You don't show any definition for func0 in the above snippet. Where is
>> it defined?
>>
>> Kent
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> http://mail.python.org/mailman/listinfo/tutor
>>
>
You can put these defs in any order.  But when you invoke the function
from your outerlevel code, all of them need to have been defined.  I'm
guessing you had these in this order:

<code>
def myFunc(self, inputList):
    dictionary={0: func0, 1: func1, 2:func2}
    for element in inputList:
        dictionary[element]()    ...

myFunc(3, 1, 2, 1)                 #this is too early in the file,
because the following defs have not been defined yet

def func():
     code...
def func0():
    do stuff
def func1():
    do stuff
def func2():
    do stuff

#move the call to myFunc() here
</code>


Move the outerlevel code to the end, and you're usually better off.  You
also might want to put it inside an
if __name__ == "__main__":

clause.


Note, I also changed the variable 'dict'  to 'dictionary,'  since dict
already has a meaning in Python.  Not a big deal in this particular
case, but if you ever wanted to convert a list to a dict, and called
dict(), you'd wonder what went wrong.  Better to kill the habit early.

DaveA


I have the method inside a main method at the end of my program.  The weird
thing is that I typed up my small example and ran it and it worked fine.
But when I run my big program, I still get the error that func0, as I call
it in my example, is not defined.  Do you  think there could be something
else in my program that is making this go wrong?


Megan Land
FVT Blade EMET Test Engineer
mland at us.ibm.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20090814/1fcdb04c/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graycol.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/tutor/attachments/20090814/1fcdb04c/attachment-0002.gif>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ecblank.gif
Type: image/gif
Size: 45 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/tutor/attachments/20090814/1fcdb04c/attachment-0003.gif>


More information about the Tutor mailing list