Python3.0のアノテーションを使ってみる

30分プログラム、その525。What’s New In Python 3.0 — Python v3.0.1 documentationを眺めていたら、関数アノテーションがおもしろそうだったので、試してみる。

# 引数にアノテーションをつける
def compile(source: "something compilable",
            filename: "where the compilable thing comes from",
            mode: "is this a single statement or a suite?"):
     ...

# 返り値にアノテーションをつける
def sum() -> expression:
    ...

のように、関数の引数や戻り値に自由に情報を付加できる。任意のPythonの式をアノテーションとして使える。無限ループになる式を書いてみたら、普通にスタックオーバーフローした。
で、つけたアノテーションの利用方としては、型チェックとか関数オーバーロードとかいろいろあるらしいけど、今回は無難にドキュメントの自動生成のために使ってみる。

使い方

# 普通に実行する
$ python3.0 fact.py
[11]

#ドキュメントの表示
$ pydoc3.0 fact.prime_factor
Help on function prime_factor in fact:

fact.prime_factor = prime_factor(p: '素数') -> ['素因数分解した結果']
    どんな素数も素因数分解する関数

ソースコード

#! /usr/bin/python3.0

def prime_factor(p : "素数") -> ["素因数分解した結果"]:
    'どんな素数も素因数分解する関数'
    return [p]

if __name__ == '__main__':
    print(prime_factor(11))