C кодировкой модули могут быть встроены в систему (не хватает __file__
) или жить в .so
или .pyd
динамической библиотеки (которая их __file__
укажет) - это деталь реализации, что вы не должны заботиться о.
Если вы хотите, чтобы понять, как Python-отозваны, C-кодированные функция работает, изучая код, обучение чтения C, как правило, лучше (гораздо менее жесткий, чем на самом деле продуктивно кодирования в C ;-). Однако часто вы найдете (наводящий на размышления, не авторитетный) «пример реализации Python» C-кодированной функциональности, и вы можете изучить те.
Особенно плодотворное хранилище Python-кодированных эквиваленты Python стандартной функциональности библиотеки, которая обычно закодированная в C является pypy проекта (который делает реализации Python закодированных в Python) - его источники просматриваться here и, конечно, вы можете скачать и прочти их на своей машине.
В частности, это PyPy в _functools.py реализация:
""" Supplies the internal functions for functools.py in the standard library """
class partial:
"""
partial(func, *args, **keywords) - new function with partial application
of the given arguments and keywords.
"""
__slots__ = ['func', 'args', 'keywords']
def __init__(self, func, *args, **keywords):
if not callable(func):
raise TypeError("the first argument must be callable")
self.func = func
self.args = args
self.keywords = keywords
def __call__(self, *fargs, **fkeywords):
newkeywords = self.keywords.copy()
newkeywords.update(fkeywords)
return self.func(*(self.args + fargs), **newkeywords)
Довольно тривиальный читать и понимать, я надеюсь!
Реализация 'functools' находится в C для 2.5 и 2.6. Если вы хотите увидеть источник, вы будете * иметь * для чтения C. Кажется, что разница в том, как он скомпилирован на моем дистрибутиве, но в любом случае, источник находится в 'C'. Посмотрите ссылки на репо в своем ответе, если вы хотите увидеть источник. –
zjm: Не используйте непубличные ('_ *') модули напрямую и просмотрите документацию для functools.partial по адресу http://docs.python.org/library/functools.html#functools.partial. – 2010-01-09 07:38:59
+1 для не использования (полу) частных модулей с префиксом '_'. –