On Dec 16, 2:56 pm, Ryan Kelly <r...@rfk.id.au> wrote: > On Thu, 2010-12-16 at 21:49 +0000, John Gordon wrote: > > (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 > > 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? > > "one entry, one exit" has its good points, but it's *way* overquoted and > overused. > > Do you raise any exceptions? Do you call any functions that might raise > exceptions? If so, you've got multiple exit points already. > > I think this style a lot more important in a language like C where you > have to be super-careful about cleaning up after yourself. The single > exit point makes it easier to verify that all cleanup tasks have been > performed. Assuming you're using "with" or "try-finally" then you just > don't need such guarantees in python.
Even without the cleanup issue, sometimes you want to edit a function to affect all return values somehow. If you have a single exit point you just make the change there; if you have mulitple you have to hunt them down and change all of them--if you remember to. I just got bit by that one. It's a trade-off. Readability and/or conciseness versus error robustness. I tend to go for the former but mileage varies. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list