17. 関数定義
def により定義
引数, 返り値ともに Python オブジェクト
Python から呼び出せる
cdef により定義
引数, 返り値ともに C 変数 (Python オブジェクトも含む)
Python から呼び出せない
def integrate(double a, double b, int N):
# 引数, 返り値は自動的に型変換される
cdef int i
cdef double s, dx
s = 0; dx = (b - a) / N
for i in range(N):
s += f(a + i * dx)
return s * dx
cdef float f(double x) except *:
return 1 / x
17 / 39
18. 拡張型
cdef class Interval:
cdef public float x0, x1
def __init__(self, x0, x1):
self.x0 = x0; self.x1 = x1
@property
def length(self):
return self.x1 - self.x0
def widen(Interval i not None, r):
i.x0 *= r; i.x1 *= r
ビルトイン型, 拡張型を継承できる. 多重継承はできない.
アトリビュートには public, readonly を指定できる
拡張型の値は None を取りうる
拡張型の引数には not None を指定できる
<MyClass?> は型チェック付きキャスト
18 / 39