旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

Pythonクックブックを読んでいる(3)

2009年2月28日

<< 前回 |
次回 >>

たまに技術本を読んでいるのでブログ書かなきゃ損損シリーズ の続き。

【3章 時間とお金】

1. dateutilパッケージ
標準のdateモジュールには無い便利機能を提供してくれる、サードパーティのパッケージ。
例えば、timedeltaには出来ない「月や年の加減算」や「月初日と月末日の取得」といった、ありがちな処理を提供してくれる。

>>> import datetime
>>> from dateutil import relativedelta
>>> one_day = datetime.date(2009, 3, 15)
>>> one_day
datetime.date(2009, 3, 15)
>>> one_day + relativedelta.relativedelta(months=1) # 1月加算
datetime.date(2009, 4, 15)
>>> one_day + relativedelta.relativedelta(day=1) # 月初
datetime.date(2009, 3, 1)
>>> one_day + relativedelta.relativedelta(day=99) # 月末
datetime.date(2009, 3, 31)

Python標準だと、日時はローカルな環境の影響を受けやすい部分なので、方針として便利な機能よりも安定した機能のみを提供するようにしている・・・
・・・と、もっと端的にいうと「標準だと不便」なので、このパッケージはとてもありがたい。
常に必要かは考えどころだけど、カレンダー機能を作るような場合は、是非是非使いたい!

ダウンロード) http://labix.org/python-dateutil
※setup.pyではなく手動でdateutilディレクトリだけ配置してもtest.pyは通ったので、プロジェクト単位でも使用可能っぽい。

2. weekday()

>>> import datetime, calendar
>>> today = datetime.date.today()
>>> today
datetime.date(2009, 2, 28)
>>> today.weekday() == calendar.SATURDAY
True

Python的に勉強になったというよりは、
「曜日が日付から一意で決まるものである」という、リアル仕様の方にガッテンした。

3. raw_input
章のテーマに無関係だけど、目に止まったので。
[y/N] を要求するような対話的なスクリプトを書くときにraw_inputという組み込み関数が使えるようだ。
raw_input.py

print "Start prompting."
while True:
cmd = raw_input()
if cmd == "q":
break
else:
print cmd * 3
print "Completed prompting."

実行、入力を3倍にして標準出力へ返すか、qを入力すると終了する。

$python raw_input.py
Start prompting.
aiueo
aiueoaiueoaiueo
Ask him!
Ask him!Ask him!Ask him!
URUSE-YO!
URUSE-YO!URUSE-YO!URUSE-YO!
q
Completed prompting.

おー、おもしれー。

本のサンプルでは、入力を受け取るときにありがちなエラー周りも実装してくれていたので、何か作るときは参考になる。
デプロイ用にインタラクティブなスクリプトを提供する・・・とかも出来るなー。

4. Decimalモジュール
お金周りとか、シビアに十進数で計算する必要がある場合は、Decimalモジュールを使うべし。
ただ、記述が面倒なモジュールなので、何かしらラッパクラス/関数は作った方がいいかも・・・。

3章は以上。

全体的に「これ必要かな?」というような、細かいネタが多かった気がする。
ざっくりと、日時周りで困ったらdateutilで、ちょっと頑張りたかったらクックブックを開こうか・・・という風に把握させていただいた。

まぁ、頑張らないんですけどね!