왜 파이썬이 그렇게하지 않을까요? 나는 inspection
모듈이 함수의 소스를 출력 할 수 있다고 생각한다. 따라서 모듈을 가져 와서 함수를 선택하고 검사하면된다. 잠깐만. 당신을위한 해결책을 놓치지 마십시오.
OK.
>>> def test(f):
... print 'arg:', f
...
>>> test(1)
arg: 1
>>> inspect.getsource(test)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\inspect.py", line 699, in getsource
lines, lnum = getsourcelines(object)
File "C:\Python27\lib\inspect.py", line 688, in getsourcelines
lines, lnum = findsource(object)
File "C:\Python27\lib\inspect.py", line 529, in findsource
raise IOError('source code not available')
IOError: source code not available
>>>
을하지만, 사용 사례, 그것은 작동합니다 : 그것은 대화 형으로 정의 된 물건 작동하지 않습니다 inspect.getsource
기능을 밝혀 디스크에 저장되어 모듈의 경우.
def test(f):
print 'arg:', f
def other(f):
print 'other:', f
을 그리고 비교이 대화 형 세션 : 예를 들어 내 test.py
파일을 가지고
>>> import inspect
>>> import test
>>> inspect.getsource(test.test)
"def test(f):\n print 'arg:', f\n"
>>> inspect.getsource(test.other)
"def other(f):\n print 'other:', f\n"
>>>
을 그래서 ... 당신은 파이썬 소스 파일의 이름을 받아 간단한 파이썬 스크립트를 작성해야하고 함수/객체 이름을 인수로 사용합니다. 그런 다음 모듈을 가져 와서 기능을 검사하고이를 STDOUT으로 인쇄해야합니다.
와우, 굉장 :) 나는 그것이 나의 실제 세계 기능에서 작동하는지 확인할 수있다. 흥미로운 점은 동일한 이름을 가진 두 개의 함수가있는 경우 (서로 다른 클래스에있을 경우 발생할 수 있음) 두 끝을 모두 반환한다는 것입니다. 그것이 의도 된 것인지 (또는 실제로 올바른 행동이 있어야하는지) - 좋은 결과 인 것 같습니다. –
@SteveBennett : 방금 그 행동을 수정했습니다. 이제는 발견 된 첫 번째 기능 만 처리해야합니다. – Birei
"같은 이름의 모든 함수를 선택"하는 것과 비슷합니다. 그렇지 않으면 같은 이름의 두 번째 함수에 어떻게 접근 할 수 있을지 잘 모르겠습니다. –