[Python-ideas] values in vs. values out

Ron Adam rrr at ronadam.com
Fri Jan 21 04:47:15 CET 2011



On 01/17/2011 09:04 AM, Luc Goossens wrote:
> Hi all,
>
> Thanks to everybody for your feedback!
> So I guess the answer to my question (which - I noticed just now - did not
> end with a question mark), is ... no.
>
>> If your function is returning a bunch of related values in a tuple, and
>> that tuple keeps changing as you re-design the code, that's a code smell.
>
> the use cases I have in mind are the functions that return a set of weakly
> related values, or more importantly report on different aspects
> of the calculation;
> an example of the first is a divmod function that returns the div and the
> mod while callers might only be interested in the div;
> examples of the latter are the time it took to calculate the value,
> possible warnings that were encountered, ...

You could use a class instead of a function to get different variations on 
a function.

 >>> class DivMod:
...     def div(self, x, y):
...         return x//y
...     def mod(self, x, y):
...         return x%y
...     def __call__(self, x, y):
...         return x//y, x%y
...
 >>> dmod = DivMod()
 >>> dmod(100, 7)
(14, 2)
 >>> dmod.div(100, 7)
14
 >>> dmod.mod(100, 7)
2

Adding methods, to time and/or get warnings, should be fairly easy.

If you do a bunch of these, you can make a base class and reuse the common 
parts.

For timing, logging, and checking returned values of functions, decorators 
can be very useful.

Cheers,
    Ron




More information about the Python-ideas mailing list