这是如何进口的工作,什么文件没用?

import _functools

在python2.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__'

我怎么能得到含义的部分(从_functools进口的部分)如果我不能读C码?

有帮助吗?

解决方案

C编码模块可以建立在(缺乏 __file__)或生活在一个 .so.pyd 动态图书馆(其中他们 __file__ 将指示)--这是一个实施细节应该不关心。

如果你想了解如何蟒蛇可调用,C编码功能的工作通过研究码,学习 阅读 C一般最佳(远较难于实际有效 编码 在C;-).然而,往往会发现(提示性的,不具权威性的)"样品Python实现"的C-编码的功能,并可以研究 那些.

一个特别富有成效的储存库的蟒蛇的编码等同于Python标准图书馆功能的正常编码在C是的 pypy 项目(其中不Python实现编码Python)--其来源的可浏览的 在这里, 当然,你可以下载并且仔细阅读他们在你的机器。

特别是,这是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)

很容易阅读并理解,我希望!

其他提示

请提问的时候下一次更加清晰。我想,你希望这个

>>> import _functools
>>> _functools.__file__
'/usr/lib/python2.6/lib-dynload/_functools.so'

据的共享对象_functools.so,写在C.我想,它是由实际functools模块导入。为什么你想从它导入?当然,这是可能的,但是,你可以一样好from functools import partial

为Python2.6个, 的 _functools 模块是一个内置的.你可以看到,如果简单的类型 import _functools ; repr(_functools) 打进你的口译员的提示。

如果你想看到的C源模块的检查 http://hg.python.org/cpython/file/d7e85ddb1336/Modules/_functoolsmodule.c

_functools 模块没有 __file__ 属性(参见下段),因为它的编译成的解释。

为Python2.5, 的 _functools 模块是一个标准图书馆模块的实施,在C和提供 http://hg.python.org/cpython/file/a78381ead4cf/Modules/_functoolsmodule.c 如果你想要看到它。你可以看到的位置模块被装上通过打字 import _functools ; print _functools.__file__ 在你的解释提示

行为 functools.partial() 功能是描述 PEP309 在它被定义。虽然实际实现的建序往往在C PEP的包括这通常包含一个 例的实现在蟒蛇.

这个例子码应该足够让你明白的行为 functools.partial().如果有一个具体问题有关的C落实,是关于你打算要读C码。或许描述它,在你的问题以及有人可能知道答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top