> if a == 0: > do_task_0() > elif a == 1: > do_task_1() > elif a == 2: > do_task_2() > else: > do_default_task()
The if-elif-else structure that calls functions (like that above) can be avoided with the code below: def foo0(): print 'foo0' def bar0(): print 'bar0' def foo1(): print 'foo1' def bar1(): print 'bar1' def do_default_task(): print 'do_default_task' do_task = { 0:foo0, 1:foo1, 2:bar0, 3:bar1, } a = 1 # example of normal usage if a in do_task.keys(): do_task[a]() else: do_default_task() # example of testing all functions in the dict as well as the default function for a in do_task.keys() + [8]: # 8 is a non-existent key in the do_task dict print "a is ",a,"and it gives this output:", if a in do_task.keys(): do_task[a]() else: do_default_task() Carl Banks wrote: > On Mar 4, 10:55 am, "BJörn Lindqvist" <[EMAIL PROTECTED]> wrote: > >> On Tue, Mar 4, 2008 at 4:17 PM, Carl Banks <[EMAIL PROTECTED]> wrote: >> >>> > for ...: >>> > ... >>> > exhausted: >>> > ... >>> > broken: >>> > ... >>> >>> > The meaning is explicit. While "else" seems to mean little there. >>> > So I may like something similar for Python 3.x (or the removal of the >>> > "else"). >>> >>> I would not be opposed to this on its own merits, but there is a >>> rationale behind the name "else". If you consider a for loop to be a >>> rolled-up if...elif...else statement (situations where this is >>> reasonable tend to be the same ones were else would be useful), then >>> the "else" clause would remain unchanged on the for loop. >>> >>> For instance, if you have a (trivial) if...elif...else like this: >>> >>> if a == 0: >>> do_task_0() >>> elif a == 1: >>> do_task_1() >>> elif a == 2: >>> do_task_2() >>> else: >>> do_default_task() >>> >>> You could roll it up into a for...else statement like this: >>> >>> for i in range(3): >>> if a == i: >>> do_task[a]() >>> else: >>> do_default_task() >>> >> You forgot the break statement. The else suite will always be executed >> in this loop. Kind of proves bearophiles point, for-else is really >> tricky. >> > > Ah ha, but that would have been a mistake with or without the else > clause.... > > > Carl Banks > This approach works well for me: def foo0(): print 'foo0' def bar0(): print 'bar0' def foo1(): print 'foo1' def bar1(): print 'bar1' def do_default_task(): print 'do_default_task' do_task = { 0:foo0, 1:foo1, 2:bar0, 3:bar1, } a = 1 # example of normal usage if a in do_task.keys(): do_task[a]() else: do_default_task() # example of testing for i in range(len(do_task.keys)): if a in do_task.keys(): do_task[a]() else: do_default_task() -- Shane Geiger IT Director National Council on Economic Education [EMAIL PROTECTED] | 402-438-8958 | http://www.ncee.net Leading the Campaign for Economic and Financial Literacy -- http://mail.python.org/mailman/listinfo/python-list