I’m not a big fan of namedtuples in Python, but sometimes they are useful.
sys.version_info returns a named tuple (starting with Python 2.7):
sys.version_info(major=2, minor=7, micro=2, releaselevel='final', serial=0)
This means that in order to check the major number you may do
sys.version_info.major. Of course, the latter is more readable.
You can use collections.namedtuple in order to create a named tuple in Python, but what if you want to create such an object in a C extension module?
I found myself diving the CPython source looking for this, and I found it:
PyStructSequence. There is not documentation for it at the moment, but there is an issue open for it here. It’s not very complex to use, but I created a very simple example:
The example shows how a
PyStructSequence is created and exposed in a module. Operations with this types of objects are very similar to those with regular tuples (in C), so in order to set an item you’d do the following:
PyStructSequence_SET_ITEM(my_named_tuple, 0, PyString_FromString("content for field 0"));
PyStructSequence_SET_ITEM(my_named_tuple, 1, PyString_FromString("content for field 1"));
That’s about it, in case you want to dive deeper I recommend having a look at
Modules/posixmodule.c in the CPython source code and checking how
stat_result is defined.