return statement in functions

hokieghal99 hokiegal99 at hotmail.com
Tue Dec 23 14:42:37 CET 2003


Francis Avila wrote:
> hokiegal99 wrote in message
> <93f5c5e9.0312221718.23e42dac at posting.google.com>...
> 
>>I was told earlier (w/o explanation) that functions should return
>>something. I was under the impression that it was OK with Python to
>>leave the return statement off.
> 
> 
> Functions return something in Python, by definition.  If you leave the
> return statement off, Python inserts an implicit 'return None' to the end of
> the text of your function.
> 
> 
>>Could someone enlighten me on why or
>>why not to use a return statement when defining functions?
> 
> 
> This is a philosophic question.  The final end of a function is to take
> input and return output which is somehow based upon that input.  The
> functional *construct* can be abused every which way (often validly) to
> violate any part of that statement: it can take arguments which don't
> matter; it can return things which are unrelated to the arguments; it can
> have all sorts of side effects that the caller isn't interested in, etc.
> 
> 
>>Below is
>>the bit of code I was told should return something:
>>
>>def fs_object_count(path):
>>  file_count = 0
>>  dir_count = 0
>>  for root, dirs, files in os.walk(path):
>>     file_count += len(files)
>>     dir_count += len(dirs)
>>  print "Number of Files Examined: ", file_count
>>  print "Number of Folders Examined: ", dir_count
>>  print "Total Number of FS Objects:", file_count + dir_count
> 
> 
> The code is in poor style simply because it does multiple things at once in
> a way that is not terribly modular: namely, it does file/dir counts, and it
> prints results.
> 
> Better would be this:
> 
> def fs_object_count(path):
>     """Return (numdirs, numfiles) in path and its subdirectories."""
>     file_count = 0
>     dir_count = 0
>     for root, dirs, files in os.walk(path):
>         file_count += len(files)
>         dir_count += len(dirs)
>     return dir_count, file_count
> 
> dn, fn = fs_object_count('mypath')
> print "Number of Files:", fn
> print "Number of Directories:", dn
> print "Total:", fn+dn
> 
> You can have more complex/prettier output logic if you want, but the point
> is to make your functions as general as possible, while doing only one
> thing.  (And that's not a contradiction!)
> --
> Francis Avila
> 

This was very helpful to me. Thank you for taking the time to explain it!!!





More information about the Python-list mailing list