[Tutor] Optimize the code - removing the multiple IF conditions

Sunil Tech sunil.techspk at gmail.com
Tue Dec 22 09:41:57 EST 2015


My heartly thanks to Steven D'Aprano, Alan Gauld and Peter Otten
​ for addressing this.​

I would go with Steven D'Aprano
​ point​
 and will take Alan Gauld inputs.
Thanks once again.


On Mon, Dec 21, 2015 at 9:56 PM, Alan Gauld <alan.gauld at btinternet.com>
wrote:

> On 21/12/15 12:22, Sunil Tech wrote:
>
> > class OptIf(object):
> >     """docstring for OptIf"""
>
> This does not look like a useful class, it should probably
> just be a function. Are you really going to have multiple
> instances?
>
> >     def opt_me(self, ext):
> >         if ext == 'CM':
> >             rec = self.call_cm(cm, ad)
> >         if ext == 'MM':
> >             rec = self.call_mm(mm, ax)
> >         if ext == 'DM':
> >             rec = self.call_dm(dm, md)
> >         return rec
>
> These should probably be an if/elif chain rather
> than multiple if options (no risk of multiple
> operations).
>
> Without knowing more about what this is doing and what the
> various parameters represent it's hard to be sure how best
> to "optimise" it. Bear in mind too that optimising may mean
> improving readability and the if statements may be more
> readable and maintainable than any dictionary lookup
> would be.
>
> >     def call_cm(cm, ad):
> >     def call_mm(mm, ax):
> >     def call_dm(dm, md):
>
> As methods they should have a self parameter.
>
> But these look suspiciously like the same method
> with different names. The first parameter looks
> like it might be a size value. (But I've no idea
> what the second is supposed to be.)
>
> Could this be a single function which incorporates
> a scaling factor?
>
> > med_map = {'CM': call_cm, 'MM': call_mm, 'DM': call_dm}
> > but I am not able to pass the arguments.
>
> They all take two arguments so you can pass those in
> if the types are consistent.
>
> result = med_map[unit](arg1,arg2)
>
> Your problems start if the parameters are all
> different types. If that's the case you are probably
> better sticking with the if chain. Or maybe creating
> three real classes that can be instantiated as needed
> and use polymorphism to avoid the if statements.
>
> But without any more detail on what's really going on
> I am just making wild guesses.
>
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
> http://www.amazon.com/author/alan_gauld
> Follow my photo-blog on Flickr at:
> http://www.flickr.com/photos/alangauldphotos
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list