2012-05-09 45 views
10

Nếu tôi hiểu một cách chính xác,Sự khác nhau giữa PyMODINIT_FUNC và PyModule_Create

  1. PyMODINIT_FUNC bằng Python 2.x đã được thay thế bởi PyModule_Create trong Python3.X
  2. Cả hai trở PyObject*, tuy nhiên, trong Python 3. X, chức năng khởi tạo của mô-đun pHẢI bù lại PyObject* để module - tức là

    PyMODINIT_FUNC 
    PyInit_spam(void) 
    { 
        return PyModule_Create(&spammodule); 
    } 
    

    trong khi ở Python2.X, điều này là không cần thiết - ví dụ:

    PyMODINIT_FUNC 
    initspam(void) 
    { 
        (void) Py_InitModule("spam", SpamMethods); 
    } 
    

Vì vậy, sự tỉnh táo của tôi kiểm tra câu hỏi là:

  • là hiểu biết của tôi có đúng không?
  • Tại sao thay đổi này được thực hiện?

Hiện tại, tôi chỉ đang thử nghiệm các trường hợp C-mở rộng đơn giản của Python. Có lẽ nếu tôi đã làm nhiều hơn, câu trả lời cho điều này sẽ là hiển nhiên, hoặc có thể nếu tôi đang cố gắng nhúng Python vào một cái gì đó khác ....

Trả lời

4
  1. Vâng, hiểu biết của bạn là chính xác. Bạn phải trả về đối tượng mô-đun mới từ hàm initing với kiểu trả về PyMODINIT_FUNC. (PyMODINIT_FUNC khai báo hàm để trả về khoảng trống trong python2, và trả về PyObject * trong python3.)

  2. Tôi chỉ có thể suy đoán về động lực của những người tạo ra thay đổi, nhưng tôi tin rằng nó là lỗi việc nhập mô-đun có thể được xác định dễ dàng hơn (bạn có thể trả về NULL từ hàm mô-đun init trong python3 nếu có sự cố).

Các vấn đề liên quan