[CentralOH] Python Puzzle: Day generator: Factor Out Arg Parsing, Simplify Loop Test

jep200404 at columbus.rr.com jep200404 at columbus.rr.com
Thu Feb 5 17:02:00 CET 2015


On Thu, 5 Feb 2015 09:59:11 -0500, Joe Shaw <joe at joeshaw.org> wrote:

> https://gist.github.com/joeshaw/3e4172b5adc034a9771b

I had not thought of factoring out the parsing of date arguments 
as you did. Doing so yields:

def _parse_date_argument(date_, default):
    if date_ is None:
        date_ = default
    elif isinstance(date_, str):
        date_ = datetime.strptime(date_, '%Y-%m-%d').date()
    return date_

def day_generator(start_date=None, end_date=None, day_step=1):
    yesterday = date.today() - timedelta(days=1)
    start_date = _parse_date_argument(start_date, yesterday)
    end_date = _parse_date_argument(end_date, start_date)

    day_step = timedelta(abs(day_step))
    if end_date < start_date:
        day_step = -day_step
        
    min_date = min(start_date, end_date)
    max_date = max(start_date, end_date)

    # print(start_date, end_date, day_step, min_date, max_date)

    d = copy(start_date)
    while min_date <= d <= max_date:
        yield d
        d += day_step

>From https://gist.github.com/joeshaw/3e4172b5adc034a9771b

    while True:
        if not _in_range(d):
            break
        ...

can be simplified as:

    while _in_range(d):
        ...

How does your code behave if your day_generator is passed 
a datetime.date object for date arguments (as compared to 
passing a datetime.datetime object)?


More information about the CentralOH mailing list