문제
이 가져 오기는 어떻게 작동합니까, 어떤 파일을 사용합니까?
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 코드를 읽어야합니다. 또는 아마도 당신의 질문에 그것을 설명하면 누군가가 대답을 알고있을 것입니다.