Cythonの型付け
Cythonの型付け
普通のPythonとしても動く形での型付け(Pre Python Mode)
デコレータ
import cython # デコレータを使った型付け @cython.locals(a=cython.int, sum=cython.int, i=cython.int) @cython.returns(cython.int) @cython.cfunc def f(a): sum = 0 for i in range(a): sum += i return sum
型アノテーション(PEP484)
import cython # Cの中でしか使わないぞという宣言 @cython.cfunc def f(a: cython.int) -> cython.int: sum: cython.int = 0 i: cython.int for i in range(a): sum += i return sum
cython.declare
補助的な使い方をする
import cython a = cython.declare(cython.int, 100) # cdef int a = 100 と同じ
pxdファイル
a.py
# 普通にPythonを書く def f(a): sum = 0 for i in range(a): sum += i return sum
a.pxd
import cython @cython.locals(sum=cython.int, i=cython.int) cdef int f(int a)
Cythonのみで使える型付け
C風
cdef int f(int a): cdef int sum = 0 cdef int i for i in range(a): sum += i return sum
お行儀の悪いコードだと思うけど許してくれ~
例の殆どが、ほぼ完全にCにコンパイルされて高速に動作する(cython -a codefile
で黄色い行が無くなる)
同時に複数の方法を使って型付けすることもできるので、適材適所で使っていきたい