더북(TheBook)

여기까지 진행하면 ctypes API의 사용성이 좋지 않고 그다지 파이썬스럽지 않다는 점이 분명해진다. 그러나 빠르게 네이티브 코드를 불러와 실행할 수 있다는 점은 인상적이다. 이를 더 자연스럽게 사용하기 위해, 가져온 네이티브 함수를 래핑하는 파이썬 함수를 만들어 데이터 타입 변환과 검증을 수행하도록 개선할 수 있다(아이템 81 “assert로 내부 가정을 검증하고 예상을 벗어난 경우 예외를 raise하라”에서 배경 지식을 볼 수 있다).

def dot_product(a, b):
    size = len(a)
    assert len(b) == size
    a_vector = vector3(*a)
    b_vector = vector3(*b)
    result = my_library.dot_product(size, a_vector, b_vector)
    return result

result = dot_product([1.0, 2.5, 3.5], [-7, 4, -12.1])
print(result)

 

>>>
-39.35