30分プログラム、その150。n日後を返す関数を返す関数

整数nを渡すと「日時のデータを受け取って、n日後の日時を返す関数」を返す関数を作ってください。 関数を返す関数が作れない場合は、関数の代わりになるようなオブジェクトでも構いません。

Pythonの対話的インタプリタで表現すると下のようになります。

>>> def n_days_later(n):
        ?????

>>> five_days_later = n_days_later(5)
>>> datetime.datetime.now()
datetime.datetime(2007, 7, 20, 20, 11, 42, 78000)
>>> five_days_later(_)
datetime.datetime(2007, 7, 25, 20, 11, 42, 78000)

出題の意図としては「関数を返す関数」と「日時の差分の扱い方」を、それぞれ単体だと簡単すぎるので合わせ技にしてみた、というところです。

それでも簡単そうだったので、慣れないPythonでやってみる。

使い方

$ python n_day_later.py
today        : 2007-10-08 00:19:49.084366
5 days later : 2007-10-13 00:19:49.084366

ソースコード

  • 日付はdatetimeモジュールで扱う
  • 日付の差分はtimedeltaクラスを使う。この設計はいいかも
#! /usr/bin/python
# -*- mode:python; coding:utf-8 -*-
#
# n_day_later.py -
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki <hiroki1124@gmail.com> 
# http://mzp.sakura.ne.jp/
#
# Timestamp: 2007/10/08 00:10:48
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Python itself.
#
from datetime import *

def n_days_later(n):
    return lambda d: d + timedelta(days=n)

f = n_days_later(5)
n = datetime.now()
print "today        : %s" % n
print "5 days later : %s" % f(n)