If/then style question
Stefan Sonnenberg-Carstens
stefan.sonnenberg at pythonmeister.com
Thu Dec 16 17:41:41 EST 2010
Am 16.12.2010 22:49, schrieb John Gordon:
> (This is mostly a style question, and perhaps one that has already been
> discussed elsewhere. If so, a pointer to that discussion will be
> appreciated!)
>
> When I started learning Python, I wrote a lot of methods that looked like
> this:
>
>
> def myMethod(self, arg1, arg2):
>
> if some_good_condition:
>
> if some_other_good_condition:
>
> if yet_another_good_condition:
>
> do_some_useful_stuff()
> exitCode = good1
>
> else:
> exitCode = bad3
>
> else:
> exitCode = bad2
>
> else:
> exitCode = bad1
>
> return exitCode
>
>
> But lately I've been preferring this style:
>
>
> def myMethod(self, arg1, arg2):
>
> if some_bad_condition:
> return bad1
>
> elif some_other_bad_condition:
> return bad2
>
> elif yet_another_bad_condition:
> return bad3
>
else:
> do_some_useful_stuff()
> return good1
>
> I like this style more, mostly because it eliminates a lot of indentation.
>
> However I recall one of my college CS courses stating that "one entry,
> one exit" was a good way to write code, and this style has lots of exits.
>
> Are there any concrete advantages of one style over the other?
>
> Thanks.
>
The advantage in latter case is fewer operations, because you can skip
the assignments,
and it is more readable.
The "one entry, one exit" is an advice. Not a law.
Your code is OK.
As long as it works ;-)
P.S.:
Sorry, I could not resist:
return bad1 if some_bad_condition else bad2 if some_other_bad_condition
else bad3 if yet_another_bad_condition else good1 if
do_some_useful_stuff() else good1
Or consider this:
return [x for x,y in
((bad1,some_bad_condition),(bad2,some_other_bad_condition),(bad3,yet_another_bad_condition),(good1,do_some_useful_stuff()
or True)) if x][0]
Neither self explanatory nor readable :-(
More information about the Python-list
mailing list