아래에 정의 된 Python 함수가 있다고 가정하십시오.
def foo(arg1,arg2):
#do something with args
a = arg1 + arg2
return a
를 사용하여 함수의 이름을 얻을 수 있습니다 foo.func_name
. 위에서 입력 한대로 프로그래밍 방식으로 소스 코드를 얻는 방법은 무엇입니까?
답변
함수가 파일 시스템에서 사용 가능한 소스 파일에서 온 것이라면 inspect.getsource(foo)
도움이 될 수 있습니다.
foo
다음과 같이 정의 된 경우 :
def foo(arg1,arg2):
#do something with args
a = arg1 + arg2
return a
그때:
import inspect
lines = inspect.getsource(foo)
print(lines)
보고:
def foo(arg1,arg2):
#do something with args
a = arg1 + arg2
return a
그러나 함수가 문자열에서 컴파일되거나 스트림 또는 컴파일 된 파일에서 가져온 경우 소스 코드를 검색 할 수 없다고 생각합니다.
답변
는 모듈 검사 파이썬 객체의 소스 코드를 검색하는 방법이있다. 소스가 파일에있는 경우에만 작동합니다. 당신이 가지고 있다면 객체에서 소스를 얻을 필요가 없다고 생각합니다.
답변
dis
소스 코드를 사용할 수없는 경우 친구입니다.
>>> import dis
>>> def foo(arg1,arg2):
... #do something with args
... a = arg1 + arg2
... return a
...
>>> dis.dis(foo)
3 0 LOAD_FAST 0 (arg1)
3 LOAD_FAST 1 (arg2)
6 BINARY_ADD
7 STORE_FAST 2 (a)
4 10 LOAD_FAST 2 (a)
13 RETURN_VALUE
답변
IPython을 사용하는 경우 “foo ??”를 입력해야합니다.
In [19]: foo??
Signature: foo(arg1, arg2)
Source:
def foo(arg1,arg2):
#do something with args
a = arg1 + arg2
return a
File: ~/Desktop/<ipython-input-18-3174e3126506>
Type: function
답변
나는 그것이 inspect
좋은 대답 이라고 일반적으로 동의하지만 통역사에 정의 된 객체의 소스 코드를 얻을 수 없다는 것에 동의하지 않습니다. dill.source.getsource
from 을 사용 dill
하면 대화식으로 정의 된 함수 및 람다의 소스를 얻을 수 있습니다. 또한 커리에 정의 된 바운드 또는 언 바운드 클래스 메서드 및 함수에서 코드를 가져올 수 있습니다. 그러나 둘러싸는 객체의 코드가 없으면 해당 코드를 컴파일하지 못할 수 있습니다.
>>> 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
>>>
답변
runeh의 답변을 확장하려면 :
>>> def foo(a):
... x = 2
... return x + a
>>> import inspect
>>> inspect.getsource(foo)
u'def foo(a):\n x = 2\n return x + a\n'
print inspect.getsource(foo)
def foo(a):
x = 2
return x + a
편집 : @ 0sh에서 지적한 것처럼이 예제는 ipython
평범하지는 않지만 작동합니다 python
. 그러나 소스 파일에서 코드를 가져올 때는 두 가지 모두에 적합합니다.
답변
inspect
모듈을 사용 하여 전체 소스 코드를 얻을 수 있습니다 . 모듈 getsource()
에서 그 방법 을 사용해야 inspect
합니다. 예를 들면 다음과 같습니다.
import inspect
def get_my_code():
x = "abcd"
return x
print(inspect.getsource(get_my_code))
아래 링크에서 더 많은 옵션을 확인할 수 있습니다.
파이썬 코드를 검색