저는 Python 대화 형 셸 (Windows XP에서 ActiveState ActivePython 2.6.4)에서 작업하고 있습니다. 나는 내가 원하는 것을하는 함수를 만들었다. 그러나 화면을 지워서 함수 정의를 돌아볼 수는 없습니다. 행을 다시 표시하는 위쪽 화살표가 최소한의 값을 갖도록 여러 줄 함수이기도합니다. 어쨌든 함수의 실제 코드를 반환 할 수 있습니까? "코드"및 "func_code"속성이 dir()에 의해 표시되지만, 필요한 항목이 포함되어 있는지 여부는 알 수 없습니다.대화 형 셸에서 함수 정의 표시
답변
아니요, __code__
및 func_code
은 컴파일 된 바이트 코드에 대한 참조입니다. 파이썬 소스 코드로 돌아갈 수는 없습니다 (dis.dis
참조).
아아, 소스 코드는 단순히 ... 어디 기억하지, 사라 : 그것을 얻을 수 없습니다
>>> import inspect
>>> def f():
... print 'ciao'
...
>>> inspect.getsource(f)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 694, in getsource
lines, lnum = getsourcelines(object)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 683, in getsourcelines
lines, lnum = findsource(object)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 531, in findsource
raise IOError('could not get source code')
IOError: could not get source code
>>>
inspect
경우에, 그것은 꽤 나타내는 기호이다.
당신이 GNU readline
사용하여 플랫폼 인 경우 (기본적으로, 제외한 모든 창), 당신은 readline
자체 가 일부 "역사"를 기억 않고 파일에 그것을 밖으로 쓸 수 있다는 사실을 악용 할 수 ... :
>>> readline.write_history_file('/tmp/hist.txt')
그런 다음 해당 기록 파일을 읽으십시오.
"원시"명령 인터프리터가 아니라 특히 Windows와 같은 플랫폼에서 더 나은 메모리 기능을 가진 IDE를 사용할 수 있습니다.
IDE에 동의합니다.하지만 쉘은 DOS 명령 창처럼 보이고 PHB는 내가하는 일을 묻지 않습니다. –
어쩌면 이것은 유휴 상태에 대한 좋은 기능 요청 일 것입니다 ... –
ipython은 DOS 명령 창에서 풍부한 IDE에 도움이 될 수 있습니다. http://ipython.scipy.org/moin/ - 너무 부자입니다. 지금까지 대부분의 기능 ;-). –
activestate 쉘에서 수행하지 않는 한, 아니오, 쉘에서 입력 한 정확한 코드를 검색 할 수 없습니다. 적어도 Linux에서는 CPython에서 제공하는 Python 셸을 사용하여 특별한 방법이 없습니다. 아마 iPython을 사용합니다.
func_code 속성은 함수 바이트 코드를 나타내는 객체입니다.이 객체에서 얻을 수있는 유일한 것은 "원래"코드가 아니라 바이트 코드 자체입니다.
리눅스에서는'readline.write_history_file'이 도움이 될 것입니다 - 그러나 Windows는 아닙니다. –
아니요. yourfunc.func_code.co_code (실제로 컴파일 된 바이트 코드)를 파일에 작성한 다음 decompyle 또는 unpyc을 사용하여 디 컴파일을 시도 할 수 있지만 두 프로젝트는 모두 오래되어 유지 보수가되지 않으며 디 컴파일 링을 지원하지 않습니다.
처음에는 파일에 함수를 작성하는 것이 훨씬 쉽습니다.
꽤 오랜 시간이 걸렸지 만 누군가 필요할 수도 있습니다.
>>> def sum(a, b, c):
... # sum of three number
... return a+b+c
...
>>> from dill.source import getsource
>>>
>>> getsource(sum)
'def sum(a, b, c):\n # sum of three number\n return a+b+c\n'
이 dill
실행 pip install dill
를 설치 : getsource
소스 코드를 제공합니다. 형식을 얻으려면 :
>>> fun = getsource(sum).replace("\t", " ").split("\n")
>>> for line in fun:
... print line
...
def sum(a, b, c):
# sum of three number
return a+b+c
- 1. Elisp 대화 형 함수 이름
- 2. 숫자 접두사가있는 이맥스 대화 형 함수
- 3. 대화 형 텍스트 영역
- 4. 대화 형 F # 쉘을 제공하는 사이트가 있습니까?
- 5. 대화 형 SVG - 학습 리소스?
- 6. F # - 대화 형 출력을 대화 형 게시로 유지하지 마십시오.
- 7. 대화 형 활동
- 8. 대화 형 웹캠
- 9. 대화 형 배치 파일
- 10. F # 대화 형 버그?
- 11. 대화 형 Javascript 막대
- 12. 대화 형 세계지도
- 13. 대화 형 JTable
- 14. 대화 형 Python GUI
- 15. 대화 형 PHP
- 16. HTML5의 대화 형 평면도
- 17. R 대화 형 플롯?
- 18. 대화 형 파이썬
- 19. 대화 형 개체?
- 20. 사용자 대화 형 도면
- 21. Android에서 사용자 정의 대화 상자 숨기기/표시
- 22. R의 함수 동적/대화 형 디버깅을위한 권장 사항은 무엇입니까?
- 23. Java 대화 형 입력 EOF
- 24. ASP.net의 독립 실행 형 함수
- 25. Google 차트 - 포인트에 데이터 주석 표시 - 대화 형 라인 차트
- 26. 상태 표시 줄에 대화 형 알림 구현 (Android)
- 27. 대화 상자 표시
- 28. 플래시에서 대화 형 차트 만들기
- 29. 대화 형 로그온 세션 만들기
- 30. Pylons 대화 형 디버거 UnboundExecutionError
"help"기능을 사용하라는 제안을했지만 실제로는 서명이 아닌 실제 코드를 원한다는 것을 깨달았습니다. –
나는 콘솔에서 파일로 작성한 모든 코드를 얻고 싶습니다만,받은 대답은 불가능합니다 ... 슬픈 –