Rất nhiều người sử dụng Cython để biên dịch mã Python của họ trong C để đạt được hiệu suất. Nó rất dễ làm và có thể là thứ mà bạn muốn tận dụng. Show Hãy chắc chắn rằng bạn PIP cài đặt Cython trước. Quá trình tổng thể đi như thế này.
Ví dụ này, hãy để nói rằng chúng tôi muốn biên dịch chức năng này thành C def AddToTen(): Điều đầu tiên chúng ta cần làm là di chuyển điều này từ tệp .py vào tệp .pyx, đó là những gì Cython sử dụng. Bây giờ chúng tôi sẽ cung cấp thông tin loại cho các biến của chúng tôi
Ở Cython, có ba tuyên bố DEF
cpdef int AddToTen(): Vì tôi sẽ không gọi các biến bên trong chức năng của chúng tôi trong Python, tôi đã sử dụng CDEF, nhưng đối với chính chức năng, tôi đã sử dụng CPDEF Ngoài ra, lưu ý rằng chúng tôi đã nhập I trong vòng lặp và hàm vì nó trả về int. Bây giờ chúng ta phải biên dịch .pyx của chúng tôi. Trong một tệp riêng biệt (của tôi được đặt tên là setup.py), hãy viết mã sau. from distutils.core import setup Cuối cùng, trong thiết bị đầu cuối (đảm bảo bạn đang ở trong cùng một thư mục), hãy chạy dòng python setup.py build_ext --inplace Điều này nên đã biên dịch pyx của bạn và bạn sẽ thấy một tệp cùng tên với phần mở rộng .c thay vì pyx Bây giờ bạn có thể nhập các chức năng C của mình vào các tệp Python cục bộ, cho rằng bạn đã sử dụng CPDEF, chỉ bằng cách nhập tên của tệp của bạn. IDE có xu hướng cho tôi lỗi nhập mặc dù họ nhập khẩu tốt. Bạn cũng có thể nhập các thư viện Python vào tệp PYX, nhưng theo kinh nghiệm của tôi, nó thực hiện giống như trong Python. Điều này không biên dịch Python với mã máy. Nhưng cho phép tạo một thư viện được chia sẻ để gọi mã Python. Nếu những gì bạn đang tìm kiếm là một cách dễ dàng để chạy mã Python từ C mà không cần dựa vào công cụ EXECP. Bạn có thể tạo một thư viện được chia sẻ từ mã Python được bọc bằng một vài cuộc gọi đến API nhúng Python. Vâng, ứng dụng là một thư viện được chia sẻ, một. Vì vậy mà bạn có thể sử dụng trong nhiều thư viện/ứng dụng khác. Dưới đây là một ví dụ đơn giản tạo ra một thư viện chia sẻ, mà bạn có thể liên kết với chương trình C. Thư viện được chia sẻ thực thi mã Python. Tệp Python sẽ được thực thi là cpdef int AddToTen():1:
Bạn có thể thử nó với cpdef int AddToTen():2. Nó sẽ xuất hiện:
Thư viện được chia sẻ sẽ được xác định theo sau bởi cpdef int AddToTen():3:
cpdef int AddToTen():4 liên quan là:
Bạn có thể biên dịch nó với lệnh sau: ________số 8Tạo một tệp có tên cpdef int AddToTen():5 chứa các mục sau:
Biên dịch nó và chạy: cpdef int AddToTen():0 Đây là một ví dụ rất cơ bản. Nó có thể hoạt động, nhưng tùy thuộc vào thư viện, có thể vẫn khó để tuần tự hóa các cấu trúc dữ liệu C thành Python và từ Python đến C. Mọi thứ có thể được tự động hóa phần nào ... Nuitka có thể hữu ích. Ngoài ra có numba nhưng cả hai đều không nhằm mục đích làm những gì bạn muốn chính xác. Việc tạo tiêu đề C từ mã Python là có thể, nhưng chỉ khi bạn chỉ định cách chuyển đổi các loại Python thành các loại C hoặc có thể suy ra thông tin đó. Xem Python Astroid cho một máy phân tích Python AST. Làm cách nào để chuyển đổi mã python thành c?Chuyển đổi mã Python thành C cho tốc độ.. %% Cython -a def cy_fib (n): a = 0 b = 1 cho i trong phạm vi (n): a, b = a+b, a return a .. %% Cython -a cpdef double cy_fib (int n): cdef double a, b a = 0 b = 1 cho i trong phạm vi (n): a, b = a+b, a return a .. %timeit py_fib (100) %timeit numba_fib (100) %timeit cy_fib (100). Có thể biên dịch Python với mã máy không?Python không chuyển đổi mã của nó thành mã máy, thứ mà phần cứng có thể hiểu được.Nó thực sự chuyển đổi nó thành một thứ gọi là mã byte.Vì vậy, trong Python, việc biên dịch xảy ra, nhưng nó không phải là ngôn ngữ máy., something that hardware can understand. It actually converts it into something called byte code. So within python, compilation happens, but it's just not into a machine language.
Được biên dịch Python nhanh như C?Tuy nhiên, Python đi kèm với một nhược điểm lớn: nó chậm hơn nhiều so với các ngôn ngữ được biên dịch như C hoặc C ++.It is much slower than compiled languages like C or C++.
Cython có chuyển đổi Python thành C không?Những điều cơ bản của Cython Trình biên dịch Cython sẽ chuyển đổi nó thành mã C làm cho các cuộc gọi tương đương với API Python/C.Nhưng Cython còn nhiều hơn thế, bởi vì các tham số và biến có thể được khai báo là có các loại dữ liệu C.The Cython compiler will convert it into C code which makes equivalent calls to the Python/C API. But Cython is much more than that, because parameters and variables can be declared to have C data types. |