Changing calling sequence

Michael F. Stemper michael.stemper at gmail.com
Wed May 11 09:33:27 EDT 2022


I have a function that I use to retrieve daily data from a
home-brew database. Its calling sequence is;

def TempsOneDay( year, month, date ):

After using it (and its friends) for a few years, I've come to
realize that there are times where it would be advantageous to
invoke it with a datetime.date as its single argument.

As far as I can tell, there are three ways for me to proceed:
1. Write a similar function that takes a single datetime.date
    as its argument.
2. Rewrite the existing function so that it takes a single
    argument, which can be either a tuple of (year,month,date)
    or a datetime.date argument.
3. Rewrite the existing function so that its first argument
    can be either an int (for year) or a datetime.date. The
    existing month and date arguments would be optional, with
    default=None. But, if the first argument is an int, and
    either of month or date is None, an error would be raised.

The first would be the simplest. However, it is obviously WET
rather than DRY.

The second isn't too bad, but a change like this would require that
I find all places that the function is currently used and insert a
pair of parentheses. Touching this much code is risky, as well
as being a bunch of work. (Admittedly, I'd only do it once.)

The third is really klunky, but wouldn't need to touch anything
besides this function.

What are others' thoughts? Which of the approaches above looks
least undesirable (and why)? Can anybody see a fourth approach?

-- 
Michael F. Stemper
This post contains greater than 95% post-consumer bytes by weight.


More information about the Python-list mailing list