파이썬 컴파일 된 객체 (.pyc)가있는 이유를 이해할 수 없기 때문에 필자는 파이썬 인터프리터에 대해 읽었습니다.바이트 코드 컴파일을 적용하기위한 Python 프랙티스? (.pyc)
나는 내 질문에 대한 답을 얻었으나 지금은 혼란 스럽다. 좋아요. 인터프리터는 스크립트를 모듈에 컴파일합니다.이 코드를 제대로 이해하고 있다면 C의 객체와 같은 '일종의'입니다 (C 프로그래머, 파이썬을 처음 사용하는 경우). 자바에서 네이티브 명령이 아닌 바이트 코드를 컴파일하기 때문에 ... 어쨌든 스크립트를 가져올 때 또는 명시 적으로 컴파일하도록 호출하는 경우 (이는 다소 불리한 이유가 있음) 어쨌든이 작업을 수행합니다.
그렇다면 컴파일 된 바이트 코드간에 런타임 차이가 있습니까? 단 하나의 인터프리터 (바이트 코드 인터프리터) 만 있다고 가정하면, 모듈이 아직 컴파일되지 않았다면, 해석을하기 전에 문법/렉싱/파싱 (컴파일)을해야한다는 것을 의미합니다. 실행 시간이 길어질 수 있습니까?
위 사실을 취한다면 모듈이 .pyc로 컴파일되고 표준 .py 스크립트로 실행되지 않는 것이 가장 분명합니다.
가능한 한 주행에 최소 실행을하는 것이 가장 좋습니다.
진입 점에 하드 코어 논리가있는 경우 (예 : 내 트리가 두 개 트래버스되고 기타 무거운 비교) 엔트리 포인트가 자체 컴파일되지 않도록 포장해야합니까? 대신에,이다
:
# file.py:
def main():
<stuff goes here - setup, whatever shared resources different modules need, etc.>
main()
는 어떻게해야 좋을 것이다 :
# wrapper.py:
from file.py import *
main()
이 희망 나는 충분히 잘, 부탁 해요 무엇을 설명했다. 인터프리터/컴파일러가 파이썬에서 어떻게 사용되는지에 대한 잘못된 이해가 있었을 가능성이 있습니다.이 질문은 합리적이지 않습니다. 저는 파이썬을 처음 접했습니다.
TIA
나는 당신이 말하는, 네드, 스크립트/모듈 인터페이스를 구동 로직의 좋은 금액을 가지고 드라이버 파일 (만약에 당신 당신의 '주') 경우와하는지 이해하지만 다른 모듈의 실행 순서에 따라 달라 지므로 런타임마다 컴파일해야하는 추가 복잡성이 있습니다. 그래서 내 질문에 회귀해야하고 처음에 호출 된 스크립트가 기본 방법 인 것을 단순히 가져오고 단순히 "main()"이라는 줄이 있다면 가장 효율적인지 물어보십시오. 대답은 내가 생각한 것 같습니다 : 예. – Syndacate
네, 메인 파일을 작게 유지하는 것이 가장 효율적입니다. 그러나 메인 파일에서 더 많은 로직을 사용할수록, 컴파일 시간은 실행 시간만큼 작아 질 것입니다. 하나의 파이썬 파일을 컴파일하는 것은 가장 복잡한 파일조차도 오래 걸리지 않습니다. 대규모 생산 시스템에서는 문제가되지 않습니다. 코드가 작동하도록 작성한 다음 가독성과 유지 보수성에 대해 걱정하십시오. –
나에게 별도의 래퍼 파일에 한 줄짜리 주 함수 호출이 있더라도 가독성이나 유지 보수성을 저해하지는 않지만 실행 시간을 단축 할 수있다. 오늘 저는 몇 가지 번호를 사용했습니다. 직접 호출로 약 .75 초가 걸리므로 주 드라이버 스크립트를 즉시 컴파일해야합니다. 다른 한 편으로 약 5 초가 걸린다. 하나의 파일을 하나의 파일로 호출하고 실행했다. I7 2600k - Win7 64 및 8GB @ 1333에서의 파이썬 3.2 결과. 숫자가 지속될 때 나는 훨씬 더 놀랐다. – Syndacate