Message291192
I've just taught myself how to write C extensions to Python with https://docs.python.org/3.6/extending/extending.html. I think it's quite good.
Nevertheless, I've some suggested improvements. These all use the vi s/// replacement syntax.
Ambiguous 'it':
s/If the latter header file does not exist on your system, it declares the functions malloc(), free() and realloc() directly./If the latter header file does not exist on your system, Python.h declares the functions malloc(), free() and realloc() directly./
Unclear, as 'The C function' refers to the specific example, whereas 'always has' implies that this applies to all calls from Python to C:
s/The C function always has two arguments, conventionally/A C function called by Python always has two arguments, conventionally/
In
PyMODINIT_FUNC
PyInit_spam(void)
{
PyObject *m;
m = PyModule_Create(&spammodule);
if (m == NULL)
return NULL;
SpamError = PyErr_NewException("spam.error", NULL, NULL);
Py_INCREF(SpamError);
PyModule_AddObject(m, "error", SpamError);
return m;
}
remove
m = PyModule_Create(&spammodule);
if (m == NULL)
return NULL;
and replace it with
...
because it won't compile because spammodule has not been described yet on the page.
Self-contradictory: 'normally always' is an oxymoron.
s/It should normally always be METH_VARARGS or METH_VARARGS | METH_KEYWORDS; a value of 0 means that an obsolete variant of PyArg_ParseTuple() is used./It should always be METH_VARARGS or METH_VARARGS | METH_KEYWORDS; however, legacy code may use 0, which indicates that an obsolete variant of PyArg_ParseTuple() is being used./
Incomplete: this comment doesn't contain a complete thought
s/module documentation, may be NULL/pointer to a string containing the module's documentation, or NULL if none is provided/
Provide hyperlink: for user convenience, add a hyperlink to 'Modules/xxmodule.c'
s/included in the Python source distribution as Modules/xxmodule.c/included in the Python source distribution as Modules/xxmodule.c/
Incomplete: It would be good to lead programmers towards the easiest approach.
s/ If you use dynamic loading,/<new paragraph> If you can use dynamic loading, the the easiest approach is to use Python's distutils module to build your module. If you use dynamic loading,/ |
|
Date |
User |
Action |
Args |
2017-04-05 18:46:35 | ArthurGoldberg | set | recipients:
+ ArthurGoldberg, docs@python |
2017-04-05 18:46:35 | ArthurGoldberg | set | messageid: <1491417995.71.0.832434605196.issue29997@psf.upfronthosting.co.za> |
2017-04-05 18:46:35 | ArthurGoldberg | link | issue29997 messages |
2017-04-05 18:46:35 | ArthurGoldberg | create | |
|