2009-01-26

Python 3.0 のアノーテーション

Python Code Reading でアノーテーションがちらりと話題になりました。関数定義で

def func(a: expr, b: expr, ...) -> expr

という記述の仕方ができる、というもの。で、こうやって書いた expr は関数オブジェクトの __annotations__ プロパティに辞書で格納されます。

>>> def foo(a:int, b:"hogehoge") -> str: pass
...
>>> foo.__annotations__
{'a': <class 'int'>, 'b': 'hogehoge', 'return': <class 'str'>}

この構文を function annotation というそうです。で、アノーテーションに書かれた式の値が辞書に入るだけで、別に Python が静的に型チェックをしてくれるというわけではないです。一般に Python 関数定義では戻り値の型をコンパイル時に特定することはできませんから。



じゃあ何に使うのかと言うと動的型チェックをテスト時や運用時にするとかでしょう。他にも PEP 3107 にはIDE で関数の引数や戻り値を表示させるとか、その他 inspection のアプリケーションっぽいことが挙げられています。



戻り値の型チェックは、こんな感じでしょうか。

>>> def check(func):
    def call_and_check(*args, **kw):
        result = func(*args, **kw)
        if not isinstance(result, func.__annotations__["return"]):
            raise TypeError
        else:
            return result
    return call_and_check       



@check
def foo(x:int) -> int:
    return x



print( foo(1) )
print( foo("1") )
... ... ... ... ... ... ... ... >>> ... ... ... >>> 1
>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in call_and_check
TypeError

引数の型チェックは、ちょっと面倒ですね。*args に入ってくるのか、**kw に入ってくるのかの場合分けなんかが死ぬほど面倒くさそうです。継承されたメソッドがきちんと規約に合っているか、とかなら簡単にチェックできそうです。



2009-01-19

Penta5n - トライアスロンのトレーニング管理できるウェブサービス

トライアスロンの練習記録はどこに書いておいてもよいのですが、ジマンパワーを活用するには公開できたほうがよいです。で、作ろうかなぁと思った矢先に発見。



Penta5n はトレーニングやレースの記録を保存できるウェブサービスです。トライアスロンを想定しているので、スイム、バイク、ランにわけて記録できます。グラフ表示するときも、日ごとの表示はもちろん、積算距離も出ます。



他の機能としては、トレーニングのコーチを生業にしている会社のようで、プランニングなる機能もあるようです。が、どうもエラーが出たり、次へ進むボタンが表示されなかったりです。そのうち直るでしょう。あとライバルの登録や、VO2Max なんかを記録することもできます。ふむふむ。



iPenta5n という iPhone アプリもあって、こちらは GPS を使って走行コースの保存もできるようです。そのうち iPhone とウェブのアプリ統合もされるそうです。



しばらく使ってみようと思います。



2009-01-05

森博嗣の S&M シリーズ

森博嗣の「S&Mシリーズ」を読みはじめ、「すべてがFになる」「冷たい密室と博士たち」「笑わない数学者」「詩的私的ジャック」「封印再度」を読みました。最後に読んだ推理小説は、小学生の頃に読んだ、江戸川乱歩の怪人二十面相シリーズなので、20年ぶりくらいの推理小説です。



謎解きがマインスイーパをやっている感じで面白いです。このセルの周りには爆弾が1個なので、こっちには絶対に爆弾が無い、というような感じです。境界条件を特定して、それらの条件を満たすような系をみつける、と。



面白い言い回しを、いくつか。



犀川は何を言ったのかよく覚えていなかった。たぶん、精神が忘却を強く望んだのであろう。(笑わない数学者 p.375)



恥ずかしい発言をした後に。



実は、あの日、パーティのあとで、西之薗君がキッチンでサンドイッチ……、のようなもの……を作ったんです。これは、僕の記憶が曖昧なのではありません。記憶は極めて鮮明ですが、彼女の作ったものが曖昧だった (笑わない数学者 p.440)



まずい料理を食わされたことを回想するときに。



犀川にとって食事のコンセプトは、エネルギィ補給であって、空中給油みたいな形態が理想である。(封印再度 p.252)



昼食時、自席でカロリーメイトを食べていることをごちゃごちゃ言われたときに。あるいは、参加したくない会食に誘われたときに。



あと、どこで出てきたのか忘れましたが「太陽暦の1月1日は、太陽系における特異点でも何でもない」みたいなのが出てきます。記念日的な行事に参加したくないときに。ちなみに、普段読まない推理小説を5冊まとめて読めるのは、年末年始の休暇くらいだと思います。