[Tutor] switch statements

Gregor Lingl glingl at aon.at
Fri Jul 9 11:23:11 CEST 2004



Karthikesh Raju schrieb:

>Hi All,
>
>We were implementing a switch satetement like
>
>testfile.py
>dec = 1
>perf = { \
>	1:bigfile.func1(), \
>	2:bigfile.fun2()}[dec]
>
>now bigfile.py has
>
>def func1():
>   print "In func1"
>   return 5
>
>def func2():
>   print "In func2"
>   return 42
>
>Now when we run the testfile.py we get:
>
>In func1
>In func2
>
>  
>
Certainly! You will get a clueon what's going on,
if you delete [dec] and have a look at perf:
def func1():
   print "In func1"
   return 5

def func2():
   print "In func2"
   return 42

dec = 1
perf = { \
    1:func1(), \
    2:func2()}

will output:

In func1
In func2
 >>> perf
{1: 5, 2: 42}

Clearly perf[1] outputs 5.

What you intended was, that your perf dictionary contains
function object. Then you must not evaluate the functions
(which is done, if you attach a pair of parentheses) :

dec = 1
perf = { \
    1:func1, \
    2:func2}

Look at perf:
 >>> perf
{1: <function func1 at 0x00A4F2B0>, 2: <function func2 at 0x00A4F270>}

So perf contains two functions. The first one is:

 >>> perf[1]
<function func1 at 0x00A4F2B0>

You can call it
 >>> perf[1]()
In func1
5

To summarize, your program will do what you
expected - if I understand you right - ,
 if you change it that way:

testfile.py
dec = 1
perf = { \
	1:bigfile.func1, \
	2:bigfile.fun2}[dec]()

Regards, Gregor



More information about the Tutor mailing list