Python là một ngôn ngữ lập trình cấp cao, nhưng thông qua việc sử dụng mô-đun ctypes
, chúng ta có thể gọi mã nguồn C nguyên bản từ Python. Bài viết này sẽ giải thích chi tiết từ cách sử dụng cơ bản của ctypes
đến các chủ đề nâng cao.
ctypes
là gì?
Mô-đun ctypes
của Python là một bọc cho việc sử dụng thư viện chia sẻ hoặc thư viện liên kết động (DLL) được viết bằng ngôn ngữ C từ Python. Thông qua điều này, mã nguồn Python có thể tương tác với mã nguồn C nguyên bản và đạt được hiệu suất và chức năng cao cấp.
Cách sử dụng cơ bản của ctypes
1. Tải thư viện
Đầu tiên, chúng ta hãy xem cách sử dụng ctypes
để tải thư viện C vào Python.
from ctypes import CDLL # Tải thư viện chia sẻ my_library = CDLL('./my_library.so') # Chỉ định đường dẫn thư viện
2. Gọi hàm
Tiếp theo, là cách gọi các hàm trong thư viện đã tải.
# Gọi hàm trong thư viện C result = my_library.my_function(arg1, arg2) print(result)
Thao tác với cấu trúc và con trỏ
Sử dụng ctypes
, chúng ta có thể thao tác với cấu trúc và con trỏ được định nghĩa trong ngôn ngữ C.
1. Định nghĩa cấu trúc
from ctypes import Structure, c_int, c_char_p class MyStruct(Structure): _fields_ = [ ('field1', c_int), ('field2', c_char_p), ]
2. Thao tác với con trỏ
# Tạo con trỏ my_pointer = POINTER(MyStruct)() # Truy cập cấu trúc thông qua con trỏ my_pointer.contents.field1 = 42 my_pointer.contents.field2 = b'Xin chào, ctypes!'
Chủ đề Nâng cao: Xử lý hàm gọi lại
Sử dụng ctypes
, chúng ta cũng có thể gọi hàm gọi lại được định nghĩa trong mã nguồn C từ Python.
from ctypes import CFUNCTYPE # Định nghĩa hàm gọi lại được sử dụng trong mã nguồn C callback_func_type = CFUNCTYPE(c_int, c_int, c_int) def my_callback(arg1, arg2): print(f'Gọi lại với các tham số: {arg1}, {arg2}') return arg1 + arg2 # Chuyển đổi hàm Python thành hàm gọi lại callback_func = callback_func_type(my_callback)
Tổng kết
Bài viết này đã giới thiệu từ cách sử dụng cơ bản của mô-đun ctypes
đến thao tác với cấu trúc và con trỏ, cũng như xử lý hàm gọi lại. Thông qua các phương pháp này, lập trình viên Python có thể sử dụng mã nguồn C hiện có trong khi đạt được hiệu suất và chức năng cải thiện.