Kent Johnson said unto the world upon 2004-12-15 20:16: > I would write > def is_leap_year(year): > try: > datetime.date(year, 2, 29) > return True > except ValueError: > return False
Not an adherent of the "only one exit point" doctrine then, hey? I spent a while a few weeks ago with a bug in a function that happened because I'd not noticed that I had two return statements, so I'm leery of this at the moment. (I concede if the function was long enough to hide that from me, it was probably too long.) I also like the conceptual purity of one way in and one way out. But, in my code above, that is indeed purchased at the cost of the ugly and a bit anomalous assignment of True.
Right you are. I wondered if anyone would notice :-)
I find multiple returns very handy. They can often reduce the indentation of a block or eliminate the need for flag variables. And I don't see any benefit from having a single return.
One simple use of multiple returns is to handle different conditions in a function. Especially for error conditions. I like to handle special cases early in a function. (This is the GuardClause idiom from the web page you cited: http://c2.com/cgi/wiki?GuardClause) For example something like
def fn(a, b): if not a: return None
if b == 0: return 0
# Calculate result from a and b return result
Without the multiple returns this might look like
def fn(a, b): if not a: result = None
elif b == 0: result = 0
else: # Calculate result
return result
To me the first version is cleaner and clearer. The exceptional cases are handled unambiguously at the start of the fn, the rest of the code just handles the normal case.
Kent _______________________________________________ Tutor maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor