내장된 Python 함수의 소스 코드를 찾으십니까?
파이썬에 내장된 함수가 어떻게 작동하는지 알 수 있는 방법이 있나요?사용방법뿐만 아니라 어떻게 만들어졌는가, 분류 또는 열거된 코드는 무엇인가 등입니다.
Python은 오픈 소스이므로 소스 코드를 읽을 수 있습니다.
특정 모듈 또는 함수가 구현되어 있는 파일을 확인하려면 일반적으로__file__
기여하다.또는 를 사용할 수 있습니다.inspect
모듈, "Retriving Source Code" (소스 코드 취득) 섹션을 참조하십시오.inspect
.
빌트인 클래스나 메서드의 경우, 이것은 간단하지 않습니다.inspect.getfile
그리고.inspect.getsource
는 오브젝트가 내장되어 있음을 나타내는 유형 오류를 반환합니다.그러나 많은 기본 제공 유형은 Python 소스 트렁크의 하위 디렉터리에서 찾을 수 있습니다.예를 들어 열거 클래스의 구현에 대해서는 여기를 참조해 주십시오.또한 이 클래스의 구현에 대해서는 여기를 참조해 주십시오.list
유형.
다음은 @Chris의 답변을 보충하기 위한 요리책 답변입니다.CPython은 GitHub로 이동했으며 Mercurial 저장소는 더 이상 업데이트되지 않습니다.
- 필요한 경우 Git을 설치합니다.
git clone https://github.com/python/cpython.git
코드는 다음 서브디렉토리로 체크아웃됩니다.
cpython
->cd cpython
- 예를 들어 다음과 같은 정의를 찾고 있다고 합시다.
print()
... egrep --color=always -R 'print' | less -R
- 아하! 봐!
Python/bltinmodule.c
->builtin_print()
즐거운 시간 되세요.
나는 다음 것의 출처를 찾기 위해 조금 파헤쳐야 했다.Built-in Functions
검색 결과 수천 개의 결과를 얻을 수 있기 때문입니다. (출처를 찾을 수 있는 검색 결과가 있으면 행운을 빌어요.)
어쨌든 이러한 모든 함수는 에 정의되어 있습니다.bltinmodule.c
함수는 로 시작합니다.builtin_{functionname}
빌트인 소스: https://github.com/python/cpython/blob/master/Python/bltinmodule.c
빌트인 타입의 경우:https://github.com/python/cpython/tree/master/Objects
iPython 쉘을 사용하면 다음과 같이 간단하게 할 수 있습니다.function?
에서 문서를 제공합니다. function??
에 코드도 나타냅니다.그러나 이것은 순수 비단뱀 기능에만 적용됩니다.
그러면 언제든지 (c)Python의 소스 코드를 다운로드할 수 있습니다.
핵심 기능의 구현에 관심이 있는 경우 PyPy 소스를 참조하십시오.
2가지 방법,
- 다음을 사용하여 스니펫의 사용법을 확인할 수 있습니다.
help()
- 이러한 모듈의 숨겨진 코드를 확인하려면
inspect
1) 검사:
inpect 모듈을 사용하여 원하는 코드를 탐색합니다.메모: Import한 모듈 패키지에 대해서만 코드를 확인할 수 있습니다.
예:
>>> import randint
>>> from inspect import getsource
>>> getsource(randint) # here i am going to explore code for package called `randint`
2) 도움말():
간단하게 사용하시면 .help()
명령어를 사용하여 내장 함수와 해당 코드에 대한 도움말을 볼 수 있습니다.
str는, 「-」: str() 「- 「-」라고 입력합니다.help(str)
이렇게 돌아오고
>>> help(str)
Help on class str in module __builtin__:
class str(basestring)
| str(object='') -> string
|
| Return a nice string representation of the object.
| If the argument is a string, the return value is the same object.
|
| Method resolution order:
| str
| basestring
| object
|
| Methods defined here:
|
| __add__(...)
| x.__add__(y) <==> x+y
|
| __contains__(...)
| x.__contains__(y) <==> y in x
|
| __eq__(...)
| x.__eq__(y) <==> x==y
|
| __format__(...)
| S.__format__(format_spec) -> string
|
| Return a formatted version of S as described by format_spec.
|
| __ge__(...)
| x.__ge__(y) <==> x>=y
|
| __getattribute__(...)
-- More --
Python Developer Guide는 알려지지 않은 리소스입니다.
최근호 GH에서는 질문하신 질문에 대처하기 위한 새로운 장(CPython Source Code Layout)이 추가되었습니다.변경이 필요한 경우는, 그 자원도 갱신됩니다.
바로 질문으로 넘어갑시다.
내장된 Python 함수의 소스 코드를 찾으십니까?
는 '소스코드'에 .cpython/Python/bltinmodule.c
GitHub 저장소에서 소스 코드를 찾으려면 여기를 방문하십시오.내장된 모든 함수는 다음과 같이 시작됩니다.builtin_<name_of_function>
, , , , , , , , , , 등입니다.sorted()
실장되어 있습니다.builtin_sorted
.
고객님의 편의를 위해 이행을 게시하겠습니다.sorted()
:
builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
{
PyObject *newlist, *v, *seq, *callable;
/* Keyword arguments are passed through list.sort() which will check
them. */
if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
return NULL;
newlist = PySequence_List(seq);
if (newlist == NULL)
return NULL;
callable = _PyObject_GetAttrId(newlist, &PyId_sort);
if (callable == NULL) {
Py_DECREF(newlist);
return NULL;
}
assert(nargs >= 1);
v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames);
Py_DECREF(callable);
if (v == NULL) {
Py_DECREF(newlist);
return NULL;
}
Py_DECREF(v);
return newlist;
}
눈치채셨겠지만 Python 코드가 아니라 C 코드입니다.
@Jim에서 설명한 바와 같이 파일 구성은 다음과 같습니다.재생되어 검출이 용이함:
Python 모듈의 경우 일반적인 레이아웃은 다음과 같습니다.
Lib/<module>.py Modules/_<module>.c (if there’s also a C accelerator module) Lib/test/test_<module>.py Doc/library/<module>.rst
확장 전용 모듈의 경우 일반적인 레이아웃은 다음과 같습니다.
Modules/<module>module.c Lib/test/test_<module>.py Doc/library/<module>.rst
빌트인 타입의 경우 일반적인 레이아웃은 다음과 같습니다.
Objects/<builtin>object.c Lib/test/test_<builtin>.py Doc/library/stdtypes.rst
빌트인 함수의 경우 일반적인 레이아웃은 다음과 같습니다.
Python/bltinmodule.c Lib/test/test_builtin.py Doc/library/functions.rst
일부 예외:
builtin type int is at Objects/longobject.c builtin type str is at Objects/unicodeobject.c builtin module sys is at Python/sysmodule.c builtin module marshal is at Python/marshal.c Windows-only module winreg is at PC/winreg.c
언급URL : https://stackoverflow.com/questions/8608587/finding-the-source-code-for-built-in-python-functions
'programing' 카테고리의 다른 글
SqlAlchemy 결과를 JSON으로 시리얼화하는 방법 (0) | 2023.01.02 |
---|---|
SqlAlchemy 결과를 JSON으로 시리얼화하는 방법 (0) | 2023.01.02 |
libmariadbclient-dev 설치 오류:의존: libmariadbclient18 (0) | 2023.01.02 |
누가 이 '이중 부정' 속임수를 설명할 수 있나요? (0) | 2023.01.02 |
Vue.js에서 @keyup 핸들러를 지연시키는 방법 (0) | 2023.01.02 |