문제

이 가져 오기는 어떻게 작동합니까, 어떤 파일을 사용합니까?

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 코드를 읽을 수없는 경우 부분적 (_functools 가져 오기 부분)의 의미를 얻으려면 어떻게해야합니까?

도움이 되었습니까?

해결책

C 코딩 된 모듈은 내장 될 수 있습니다 (부족 __file__) 또는 a .so 또는 .pyd 다이나믹 라이브러리 (그들의 __file__ 표시) - 신경 쓰지 말아야 할 구현 세부 사항입니다.

코드를 연구하고 학습을 통해 파이썬을 통과 할 수있는 C 코드 기능이 어떻게 작동하는지 이해하려면 읽다 C는 일반적으로 최고입니다 (실제로 생산적으로 훨씬 덜 힘들다 코딩 C ;-). 그러나 종종 C- 코딩 된 기능의 "샘플 파이썬 구현"을 찾을 수 있으며 공부할 수 있습니다. 저것들.

C에서 일반적으로 코딩되는 Python Standard Library 기능에 대한 Python-Coded 등가의 특히 유익한 저장소는 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) 통역사 프롬프트에서 Enter를 누르십시오.

모듈의 C 소스를보고 싶다면 확인하십시오. http://hg.python.org/cpython/file/d7e85ddb1336/modules/_functoolsmodule.c

이것 _functools 모듈에는 a가 없습니다 __file__ 속성 (다음 단락 참조)은 통역사에 컴파일되었으므로.

Python2.5의 경우 _functools 모듈은 C에서 구현 된 표준 라이브러리 모듈이며 http://hg.python.org/cpython/file/a78381ead4cf/modules/_functoolsmodule.c 당신이 그것을보고 싶다면. 입력하여 모듈이로드되는 위치를 볼 수 있습니다. import _functools ; print _functools.__file__ 통역사 프롬프트에서

의 행동 functools.partial() 함수는 다음에 설명되어 있습니다 PEP 309 정의되었습니다. 비록 내장의 실제 구현은 종종 CEP의 구현이 일반적으로 포함되어 있습니다. Python의 예제 구현.

이 예제 코드는 동작을 이해하기에 충분해야합니다. functools.partial(). C 구현에 대한 특정 문제가있는 경우 C 코드를 읽어야합니다. 또는 아마도 당신의 질문에 그것을 설명하면 누군가가 대답을 알고있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top