Python Language
파이썬 소스 코드와 바이트 코드 접근하기
수색…
함수의 바이트 코드 표시
파이썬 인터프리터는 파이썬의 가상 머신에서 코드를 실행하기 전에 코드를 바이트 코드로 컴파일합니다 ( 파이썬 바이트 코드 란?
파이썬 함수의 바이트 코드를 보는 방법은 다음과 같습니다.
import dis
def fib(n):
if n <= 2: return 1
return fib(n-1) + fib(n-2)
# Display the disassembled bytecode of the function.
dis.dis(fib)
dis 모듈의 dis.dis
함수는 전달 된 함수의 디 컴파일 된 바이트 코드를 반환합니다.
함수의 코드 객체 탐색하기
CPython은 함수 객체에 대한 코드 객체에 대한 액세스를 허용합니다.
__code__
객체는 함수의 원시 바이트 코드 ( co_code
)와 상수 및 변수 이름과 같은 기타 정보를 포함합니다.
def fib(n):
if n <= 2: return 1
return fib(n-1) + fib(n-2)
dir(fib.__code__)
def fib(n):
if n <= 2: return 1
return fib(n-1) + fib(n-2)
dir(fib.__code__)
객체의 소스 코드 표시
내장되지 않은 개체
파이썬 객체의 소스 코드를 인쇄하려면 inspect
사용하십시오. 이것은 내장 객체 나 대화식으로 정의 된 객체에서는 작동하지 않습니다. 이 경우 나중에 설명 할 다른 방법이 필요합니다.
다음은 random
모듈에서 메소드 randint
의 소스 코드를 인쇄하는 방법입니다.
import random
import inspect
print(inspect.getsource(random.randint))
# Output:
# def randint(self, a, b):
# """Return random integer in range [a, b], including both end points.
# """
#
# return self.randrange(a, b+1)
설명서 문자열을 인쇄하려면
print(inspect.getdoc(random.randint))
# Output:
# Return random integer in range [a, b], including both end points.
random.randint
메소드가 정의 된 파일의 전체 경로를 출력하십시오.
print(inspect.getfile(random.randint))
# c:\Python35\lib\random.py
print(random.randint.__code__.co_filename) # equivalent to the above
# c:\Python35\lib\random.py
대화식으로 정의 된 객체
객체가 대화식으로 정의 된 경우 inspect
는 소스 코드를 제공 할 수 dill.source.getsource
대신 dill.source.getsource
를 사용할 수 있습니다
# define a new function in the interactive shell
def add(a, b):
return a + b
print(add.__code__.co_filename) # Output: <stdin>
import dill
print dill.source.getsource(add)
# def add(a, b):
return a + b
내장 객체
파이썬 내장 함수의 소스 코드는 c 로 작성되었으며 Python의 소스 코드 ( Mercurial에서 호스팅되거나 https://www.python.org/downloads/source/ 에서 다운로드 가능)를 통해서만 액세스 할 수 있습니다.
print(inspect.getsource(sorted)) # raises a TypeError
type(sorted) # <class 'builtin_function_or_method'>
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow