tobiah wrote:
> def foo(thing):
>
>       if thing:
>               return thing + 1
>       else:
>               return -1
>
> def foo(thing):
>
>       if thing:
>               return thing + 1
>       return -1
>
> Obviously both do the same thing.  The first is
> possibly clearer, while the second is more concise.
>
> Comments?

I usually prefer the second option because it is more scalable - it is
possible to later add code to the function to return other values
elsewhere in its code, and still have -1 returned by default, without
changing the original code.

As for structure, in the second example there is a clear point at which
the function return a value, unless some other value is return
elsewhere. In the first one you have to comprehend the entire if-else
statement to understand that a value will always be returned at this
point.

Another worthy alternative mentioned is:

def foo(thing):
   if thing:
     result = thing + 1
   else:
     result = -1
   return result

This is scalable as described above, and also has only one exit point,
which makes it a much simpler function. However, it forces someone
reading the code to backtrack from the return statement and search for
places where "result" could be set.

I usually start with your second example, and if I need more control
over the returned value I change the code to use this last method.
("More control" could be many things - checking the value for
debugging, applying some transformation on the returned value before
returning it...)

- Tal

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to