Разница между PyMODINIT_FUNC и PyModule_Create

Если я правильно понимаю,

  1. PyMODINIT_FUNC в Python 2.X заменен на PyModule_Createв Python3.X
  2. Оба возвращают PyObject*, однако в Python 3.X функция инициализации модуляДОЛЖНАвозвращать PyObject*в модуль - т.е.

    PyMODINIT_FUNC
    PyInit_spam (пусто)
    {
    вернуть PyModule_Create(&spammodule);
    }
    

    тогда как в Python2.X в этом нет необходимости, т.е.

    PyMODINIT_FUNC
    инициальный спам (пусто)
    {
     (пусто) Py_InitModule("спам", SpamMethods);
    }
    

Итак, мои вопросы для проверки здравомыслия:

  • Верно ли мое понимание?
  • Почему было внесено это изменение?

Прямо сейчас я экспериментирую только с очень простыми случаями C-расширений Python. Возможно, если бы я делал больше, ответ на этот вопрос был бы очевиден, или, может быть, если бы я пытался внедрить Python во что-то еще....

13
задан greatwolf 12 February 2017 в 23:41
поделиться