Написание C-кода с использованием CPython C-API значительно приятнее, чем написание C-кода без поддержки такого API. Тем не менее, это в первую очередь процесс создания и связывания и получения всего, что может быть довольно утомительно. Как только у вас есть расширение C, добавить его не так уж сложно (хотя все еще есть некоторая путаница, чтобы правильно выставить вещи на уровне Python и убедиться, что все ваши счетчики ссылок верны).
Другие инструменты статической компиляции, такие как Cython, страдают от относительно высоких затрат на настройку, чтобы скомпилированное расширение работало в первую очередь, но намного проще в использовании, когда оно уже установлено.
Относительно вашего конкретного вопроса, сравнивая подход к пониманию списка со встроенным filter
(или его эквивалентом Py3k, functools.filter
), постер вопроса, который вы связали, уже уже продемонстрировал эффект перенос кода цикла в C - встроенный цикл является одним из основных преимуществ встроенных функций итерации и сокращения, таких как sum
, any
, all
, map
и filter
.
Устранение издержек цикла уровня Python, вероятно, ответственно за большую часть измеренной ~ 10% разницы в производительности двух подходов (понимание списка по сравнению с вызовом фильтра).