[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