簡體   English   中英

_functools模塊

[英]_functools module

這個導入如何工作,它使用什么文件?

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 import partial)的含義?

C編碼模塊可以內置(缺少__file__ )或者存在於.so.pyd動態庫(它們的__file__將指示) - 這是一個你不應該關心的實現細節。

如果你想通過研究代碼來理解Python可調用的C編碼函數是如何工作的,那么學習閱讀 C通常是最好的(遠遠不如用C實際編寫代碼那么難;-)。 但是,通常你會發現(暗示的,非權威的)C編碼功能的“示例Python實現”,你可以研究它們

通常用C語言編寫的Python標准庫函數的Python編碼等效的特別富有成效的存儲庫是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.so編寫。我猜,它是由實際的functools模塊導入的。 你為什么要從中導入? 當然,有可能你也可以from functools import partial

對於Python2.6, _functools模塊是內置的。 你可以看到,只需輸入import _functools ; repr(_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__來查看加載模塊的位置import _functools ; print _functools.__file__ 在翻譯提示下import _functools ; print _functools.__file__

functools.partial()函數的行為在PEP 309中描述,其中定義了它。 盡管內置函數的實際實現通常是在C PEP中,但是這個實際上通常包含Python中的示例實現

此示例代碼應足以讓您了解functools.partial()的行為。 如果存在關於C實現的特定問題,那么您將不得不閱讀C代碼。 或者也許在你的問題中描述它,有人可能知道答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM