Trước khi vào thì nói một chút về ưu điểm và nhược điểm nhé :v
Ưu điểm: Ừ thì tất nhiên là tốc độ rồi, việc gọi hàm C++ trong Python không ảnh hưởng đến tốc độ thực thi của hàm. Ví dụ ở dưới, hàm kiểm tra nguyên tố kiểm tra một giá trị `> 10^15` trong chưa đầy `1s`, một việc mà Python thường không thể làm được.
Nhược điểm: C++ có nhược điểm gì thì cứ lôi hết ra nha :)) Nhược điểm lớn nhất là không thể tận dụng được số lớn của Python.
Lưu ý: Đây là ưu và nhược điểm của phương pháp trong câu trả lời này, dùng phương pháp khác có thể dẫn đến ưu và nhược điểm khác.
$\\$
$\\$
$\\$
Để sử dụng hàm trong C++ bằng Python, ta cần biên dịch mã nguồn C++ thành một thư viện liên kết động và đọc nó bằng Python.
$\\$
Ví dụ:
prime.c / prime.cpp
bool prime(long long val) {
if (val < 2) return false;
for (long long i=2; i*i<=val; ++i) {
if ( val % i == 0 ) return false;
}
return true;
}
// Đoạn dưới đây chỉ cần thiết nếu là C++, C thì bỏ qua.
extern "C" {
bool is_prime(long long val) {return prime(val);};
}
$\\$
Biên dịch
Nếu là file .cpp, sử dụng g++ để biên dịch
g++ prime.cpp -shared -o prime.so -fPIC
Nếu là file .c, nên sử dụng gcc để biên dịch
gcc prime.c -shared -o prime.so -fPIC
Nhìn không khác nhiều đúng không :)) Ừ thì chỉ khác là g++ là trình biên dịch của C++ còn gcc là trình biên dịch của C thôi. Mà thật ra vẫn ổn nếu biên dịch C bằng g++ do nó tương thích ngược mà :))
Sau khi biên dịch, một thư viện liên kết động prime.so sẽ được tạo.
$\\$
$\\$
$\\$
Trong Python, ta có thể sử dụng thư viện chuẩn ctypes (thật ra còn nhiều thư viện khác nma cứ dùng lib chuẩn cho khỏe :D) để đọc các thư viện liên kết động .so của C++.
main.py
from ctypes import *
cprime = CDLL('./prime.so')
print(bool(cprime.is_prime(c_longlong(1746860020068409))))
$\\$
$\\$
\begin{array}{c|c|c}\color{#ffd710}{\texttt{\{}} \color{#8655d6}{\texttt{\{}}\ \ \color{#8cdcda}{\text{Daoanhviet96}}\ \ \color{#8655d6}{\texttt{\}}} \color{#ffd710}{\texttt{\}}}\end{array}
Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!
Lớp 9 - Là năm cuối ở cấp trung học cơ sở, chúng ta sắp phải bước vào một kỳ thi căng thẳng và sắp chia tay bạn bè, thầy cô. Áp lực từ kỳ vọng của phụ huynh và tương lai lên cấp 3 thật là lớn, nhưng hãy tin vào bản thân và giữ vững sự tự tin!
Copyright © 2024 Giai BT SGK