Hướng dẫn can i convert python code to c? - tôi có thể chuyển đổi mã python thành c không?

Tôi biết đây là một chủ đề cũ hơn nhưng tôi muốn cung cấp những gì tôi nghĩ là thông tin hữu ích.

Cá nhân tôi sử dụng pypy thực sự dễ dàng cài đặt bằng PIP. Tôi có thể thay thế cho người phiên dịch python/pypy, bạn không cần phải thay đổi mã của mình và tôi thấy nó nhanh hơn khoảng 40 lần so với trình thông dịch Python tiêu chuẩn [có thể là Python 2x hoặc 3x]. Tôi sử dụng phiên bản cộng đồng Pycharm để quản lý mã của tôi và tôi thích nó.

Tôi thích viết mã bằng Python vì tôi nghĩ rằng nó cho phép bạn tập trung vào nhiệm vụ nhiều hơn ngôn ngữ, đây là một điểm cộng rất lớn đối với tôi. Và nếu bạn cần nó thậm chí còn nhanh hơn, bạn luôn có thể biên dịch thành nhị phân cho Windows, Linux hoặc Mac [không thẳng về phía trước nhưng có thể với các công cụ khác]. Từ kinh nghiệm của tôi, tôi nhận được khoảng 3,5 lần tăng tốc trên Pypy khi biên dịch, có nghĩa là nhanh hơn 140 lần so với Python. Pypy có sẵn cho mã Python 3x và 2x và một lần nữa nếu bạn sử dụng một IDE như Pycharm, bạn có thể trao đổi giữa nói Pypy, Cython và Python rất dễ dàng [mặc dù vậy, việc học và thiết lập ban đầu].

Một số người có thể tranh luận với tôi về điều này, nhưng tôi thấy Pypy nhanh hơn Cython. Nhưng cả hai đều là những lựa chọn tuyệt vời.

EDIT: Tôi muốn ghi chú nhanh khác về việc biên dịch: Khi bạn biên dịch, nhị phân kết quả lớn hơn nhiều so với tập lệnh Python của bạn vì nó xây dựng tất cả các phụ thuộc vào đó, v.v. Nhưng sau đó bạn nhận được một vài lợi ích khác biệt: tốc độ !, Bây giờ ứng dụng sẽ hoạt động trên bất kỳ máy nào [tùy thuộc vào hệ điều hành bạn đã biên dịch, nếu không phải tất cả. LOL] không có python hoặc thư viện, nó cũng làm xáo trộn mã của bạn và về mặt kỹ thuật 'sản xuất' đã sẵn sàng [ở một mức độ]. Một số trình biên dịch cũng tạo ra mã C, mà tôi chưa thực sự nhìn vào hoặc thấy nếu nó hữu ích hay chỉ là vô nghĩa. Chúc may mắn. I'd like to make another quick note about compiling: when you compile, the resulting binary is much bigger than your python script as it builds all dependencies into it, etc. But then you get a few distinct benefits: speed!, now the app will work on any machine [depending on which OS you compiled for, if not all. lol] without Python or libraries, it also obfuscates your code and is technically 'production' ready [to a degree]. Some compilers also generate C code, which I haven't really looked at or seen if it's useful or just gibberish. Good luck.

Hy vọng điều đó sẽ giúp.

+01: from libc.math cimport sqrt
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
+02: import numpy as np
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
 03: cimport numpy as np
 04: cimport cython
 05: 
 06: # function pointer 
+07: ctypedef double [*func][double[:, ::1], int i, int j]
typedef double [*__pyx_t_46_cython_magic_b37b7c839d5aa08ad1e5a2ad53e9c211_func][__Pyx_memviewslice, int, int];
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
0
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
1
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
2
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
3
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
4
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
5
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
6
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
7
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
8
  __pyx_t_1 = PyDict_New[]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_test, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
9
+02: import numpy as np
0
+02: import numpy as np
1
+02: import numpy as np
2
+02: import numpy as np
3
+02: import numpy as np
4
+02: import numpy as np
5
+02: import numpy as np
6
+02: import numpy as np
7
+02: import numpy as np
8
+02: import numpy as np
9
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
0
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
1
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
2
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
3
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
4
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
5
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
6
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
7
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
8
  __pyx_t_1 = __Pyx_Import[__pyx_n_s_numpy, 0, -1]; if [unlikely[!__pyx_t_1]] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF[__pyx_t_1];
  if [PyDict_SetItem[__pyx_d, __pyx_n_s_np, __pyx_t_1] < 0] {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF[__pyx_t_1]; __pyx_t_1 = 0;
9
 03: cimport numpy as np
0
 03: cimport numpy as np
1
 03: cimport numpy as np
2
 03: cimport numpy as np
3
 03: cimport numpy as np
4
 03: cimport numpy as np
5
 03: cimport numpy as np
6
 03: cimport numpy as np
7
 03: cimport numpy as np
8
 03: cimport numpy as np
9
 04: cimport cython
0
 04: cimport cython
1
 04: cimport cython
2
 04: cimport cython
3
 04: cimport cython
4
 04: cimport cython
5
 04: cimport cython
6
 04: cimport cython
7
 04: cimport cython
8
 04: cimport cython
9
 05: 
0
 05: 
1
 05: 
2
 05: 
3
 05: 
4
 05: 
5

Bạn có thể làm cho Python nhanh như C không?

Mặc dù C vẫn là bậc thầy về tốc độ nói chung, PYPY có thể đánh bại C trong một số trường hợp.Nếu bạn muốn mã của mình chạy nhanh hơn, có lẽ bạn chỉ nên sử dụng pypy.PYPY kém hiệu quả khi chương trình của chúng tôi nhanh chóng hoặc khi hầu hết thời gian chạy được dành cho các cuộc gọi đến các thư viện không phải là Python.PyPy can beat C in some cases. “If you want your code to magically run faster, you should probably just use PyPy.” PyPy is less effective when our program is fast anyway or when most of the runtime is spent for calls to non-python libraries.

C có làm việc với Python không?

Việc triển khai mặc định Python được viết bằng lập trình C và nó được gọi là CPython.Vì vậy, không có gì lạ khi sử dụng các chức năng C trong chương trình Python.Trong hướng dẫn này, chúng tôi đã học cách dễ dàng gọi các chức năng C trong chương trình Python.. So it's not very uncommon to use C functions in a python program. In this tutorial, we learned how to easily call C functions in a python program.

Bạn 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.

Bài Viết Liên Quan

Chủ Đề