2012-06-28 7 views
5

은 짧게, 나는파이썬 메서드의 소스 코드를 확인하는 방법은 무엇입니까?

next = "123rpq" 

문자열 'next'을 가지고 생각 나는 'next'str 방법 .isdigit()을 적용 할 수 있습니다. 그래서 내 질문은 어떻게이 방법의 구현을 확인하는 것입니다. 따라서 'method'의 소스 코드를 얻으려면 inspect.getsource(somefunction) 같은 것이 있습니까?

업데이트 : 아래 변수 이름 'next'에 대한 설명을 참조하십시오.

+2

변수 'next'는 내장 'next'를 음영 처리하므로 'next'변수를 호출하지 마십시오. – Matthias

+0

@Matthias, 감사합니다. –

답변

7

모듈, 클래스, 함수 및 기타 개체의 경우 inspect.getfile 또는 inspect.getsourcefile을 사용할 수 있습니다. 그러나 내장 객체 및 메소드의 경우 TypeError이됩니다. C0deH4cker에 의해 정의 된 바와 같이, 내장 객체와 메소드는 C로 구현되므로 C 소스 코드를 탐색해야합니다. isdigit은 파이썬 소스 코드 Objects 디렉토리의 stringobject.c 파일에 구현 된 내장 문자열 객체의 한 메소드입니다. 이 isdigits 메소드는이 파일의 3392 행에서 구현됩니다. 비슷하지만보다 일반적인 질문에 대한 나의 대답 here을보십시오.

0

해당 방법에 대한 설명서는 method.__doc__으로 인쇄 해보십시오. 그냥 호기심이 있다면 PYTHONPATH를 확인하여 모듈을 가져온 위치를 확인하고 해당 모듈에서 .py 파일을 찾을 수 있는지 확인하십시오.

+1

'help (str.isdigit)'를 사용하는 것이 더 좋습니다. –

+0

@Pablo, 감사합니다. 내 질문에이 사건을 사용하여 본보기를 줄 수 있겠습니까? 'next.isdigit()'의 소스 코드를 출력하는 방법? –

+0

@AshwiniChaudhary가 말하기를, 당신은 (str.isdigit) 또는 str.isdigit .__ doc__ –

6

isdigit() 메서드는 내장 메서드의 내장 메서드입니다. 데이터 형식. 의미,이 방법의 소스는 파이썬이 아니라 C로 작성되었습니다. 정말로 소스 코드를보고 싶다면 http://python.org으로 가서 파이썬 소스 코드를 다운로드하십시오.

0

일반적으로 inspect은 좋은 대답이지만, 클래스 (따라서 클래스 메서드)가 인터프리터에 정의되어 있으면 평평하게됩니다.

dill에서 사용하면 대화식으로 정의 된 경우에도 함수와 lambda의 소스를 가져올 수 있습니다. 또한 카레에 정의 된 바운드 또는 언 바운드 클래스 메서드 및 함수에서 코드를 가져올 수 있지만 둘러싸는 객체 코드없이 해당 코드를 컴파일하지 못할 수도 있습니다. 당신은 여전히에서 제안으로 (에서 소스 코드 파일을 열 좋아하는 편집기를 사용하여에 의지가 없을 수 있습니다

builtin 함수 또는 메소드에 대한

>>> from dill.source import getsource 
>>> 
>>> def add(x,y): 
... return x+y 
... 
>>> squared = lambda x:x**2 
>>> 
>>> print getsource(add) 
def add(x,y): 
    return x+y 

>>> print getsource(squared) 
squared = lambda x:x**2 

>>> 
>>> class Foo(object): 
... def bar(self, x): 
...  return x*x+x 
... 
>>> f = Foo() 
>>> 
>>> print getsource(f.bar) 
def bar(self, x): 
    return x*x+x 

>>> 

dill.source는 ... 그러나 ... 작동하지 않습니다 다른 답변들). builtins에 대한 소스를 볼 수 있다고 주장하는 cinspect이라는 새 패키지가 있습니다.

관련 문제