Definitions in py3c¶
This table summarizes the various macros py3c defines, or mentions in the Porting Guide.
Macro | py2 | py3 |
---|---|---|
IS_PY3 | → 0 | → 1 |
PyStr_* | → PyString_* | → PyUnicode_* |
PyBytes_* | → PyString_* | ✔ |
PyUnicode_* | ✔ | ✔ |
PyString_* | ✔ | error |
PyStr_AsUTF8AndSize | see below | ✔ |
PyInt_* | ✔ | → PyLong_* |
PyLong_* | ✔ | ✔ |
PyFloat_FromString | see below | ✔ |
PyModuleDef | see below | ✔ |
PyModuleDef_HEAD_INIT | → 0 | ✔ |
PyModule_Create | see below | ✔ |
MODULE_INIT_FUNC | see below | see below |
Rich comparisons | ✔ | ✔ |
Py_RETURN_RICHCOMPARE | = | = |
Py_RETURN_NOTIMPLEMENTED | = | = |
Py_UNREACHABLE | = | = |
PY3C_RICHCMP | see below | see below |
Py_TYPE | ✔ | ✔ |
Py_REFCNT | ✔ | ✔ |
Py_SIZE | ✔ | ✔ |
PyVarObject_HEAD_INIT | ✔ | ✔ |
PyCapsule_* | see below | ✔ |
Py_TPFLAGS_* | ✔ | see below |
PyMem_Raw* | = | = |
Py_UNUSED | = | = |
Legend:
✔ – provided by Python→ – defined in py3c as a simple alias for= – provided by at least Python 3.7; py3c backports it to Python versions that don’t define it
The following non-trivial macros are defined:
PyStr_AsUTF8AndSize()
Python 2: defined in terms of PyString_Size and PyString_AsString. Differences from Python 3:
- no encoding (string is assumed to be UTF-8-encoded)
- size pointer must not be NULL
- size may be stored even if an error occurs
PyFloat_FromSting()
Python 2: Only takes one argument, as in Python 3.PyModuleDef
Python 2: containsm_name
,m_doc
,m_size
,m_methods
fields from Python 3, andm_base
to accomodate PyModuleDef_HEAD_INIT.PyModule_Create()
Python 2: calls Py_InitModule3; semantics same as in Python 3MODULE_INIT_FUNC
(<mod>) Python 3: declares PyInit_<mod> and provides function header for itPython 2: declares & defines init<mod>; declares a static PyInit_<mod> and provides function header for itPY3C_RICHCMP()
Convenience macro for comparisons, same in both versions.Deprecated; usePy_RETURN_RICHCOMPARE
instead.- PyCapsule_*
Capsules are included in Python 2.7 and 3.1+.For 2.6, see the chapter PyCapsule API for Python 2.6.- Py_TPFLAGS_*
- Type flags that were removed in Python 3 are defined to
0
in<py3c/tpflags.h>
. Read the documentation before including the file.