这个导入是如何工作的,它使用的是什么文件?
import _functools在python 2.5中:
import _functools
print _functools.__file__提供:
Traceback (most recent call last):
File "D:\zjm_code\mysite\zjmbooks\a.py", line 5, in <module>
print _functools.__file__
AttributeError: 'module' object has no attribute '__file__'如果我不能读懂C代码,我如何获得partial (从_functools导入partial)的含义?
发布于 2010-01-10 00:38:59
C代码的模块可以是内置的(缺少__file__),也可以放在.so或.pyd动态库中(它们的__file__会指出这一点) --这是您不应该关心的实现细节。
如果您想通过研究代码来理解Python可调用的C编码函数是如何工作的,那么学习C通常是最好的(远没有用C实际高效地编码那么难)。但是,您经常会发现(提示性的、非权威的)C编码功能的“示例Python实现”,您可以研究这些实现。
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)我希望读起来和理解起来都很简单!
发布于 2010-01-09 15:18:20
下次提问时,请讲得更清楚。我猜你想要这个
>>> import _functools
>>> _functools.__file__
'/usr/lib/python2.6/lib-dynload/_functools.so'发布于 2010-01-09 15:19:02
它是一个用C编写的共享对象_functools.so,我猜它是由实际的functools模块导入的。为什么要尝试从它导入?当然,这是可能的,但是,你也可以使用from functools import partial。
https://stackoverflow.com/questions/2032677
复制相似问题