최상의 답변
python이 해석됩니다. 사람이 읽을 수있는 소스를 바이트 코드로 변환하여 .pyc 파일에 저장하고 .pyc 파일은 이식 가능하지만 .pyc 파일은 여전히 해석됩니다. 예를 들어, 일부 파이썬 인터프리터는 일반적으로 사용되는 정수인 -100에서 100까지 싱글 톤 객체를 캐시합니다. 일부는 그렇지 않습니다. 이게 어떻게 중요합니까?
시스템은 Object.id ()를 True 또는 False로 비교하는 is 연산을 합법적으로 해석 할 수 있습니다.
x = 20
x is 20 # Both True and False are valid results.
데모 :
$ python3
Python 3.6.3 (default, Oct 3 2017, 21:45:48)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 30
>>> x is 30
True
>>> x = 23442.2
>>> x is 23442.2
False
>>>
python 소스에서 바이트 코드로의 변환에는 시간이 걸립니다. 합리적으로 파이썬이 소스를 읽고 .pyc를 재구성하는 것보다 .pyc 파일을 읽는 것이 더 빠릅니다.
시간이 있었고 나는 따라 가지 못했습니다. 모듈 가져 오기, 파이썬이 모듈을로드하기 위해 디렉토리에서 \_\_init\_\_.py를 찾을 때. \_\_init\_\_.py 파일을 작게 유지하는 것이 현명했습니다. 대부분은 .pyc 파일에있는 유용한 코드를 이차적으로 가져 오도록합니다.
그리고 파이썬 최적화가 어디로 갔습니까? 마지막으로 알았습니다. 꽤 오래 전인 .pyo는 주석이 제거 된 .pyc였습니다.
답변
전에 여기에 대답했습니다. Quildreen Motta의 대답 Python과 같은 고급 언어를 컴파일하여 C만큼 빠르게 만들 수 있습니까?
하지만 간단히 말해서 사람들은 “ 빠르다 . 다소 예측 가능한 성능 이 있기 때문에 사용합니다. 그런 다음 프로그래머는 시간을 들여 프로그램을 직접 최적화하고 이러한 최적화의 결과 성능에 대해 추론하는 것이 훨씬 쉽습니다.
파이썬과 같은 동적 언어에서는 그렇게 쉽지 않습니다. 더구나 PyPy는보다 빠른 속도를 제공합니다. 여러 시나리오에서 C (gcc, 완전히 수작업으로 최적화 된 것이 아님) 성능은 몇 가지 요인 (프로그램을 통과하는 데이터, 어떤 분기를 사용했는지, 데이터의 안정성)에 따라 달라지기 때문에 이러한 시나리오가 언제 발생하는지 예측할 수 없습니다. t에 분기 ime, hotness 등).
물론 PyPy는 프로그램을 실행하는 동안 모든 최적화를 수행하므로 많은 비용 가중치를 적용해야하며 일부 최적화는 적용되지 않습니다. 그것 덕분에. AOT 컴파일러가 정말 빠른 코드를 생성하기 위해 코드를 분석하는 데 3 개월을 소비 할 수있는 것처럼 JIT 옵티마이 저는 코드를 분석하는 데 몇 분을 소비 할 수 있습니다. 두 경우 모두 비용이 갚을 것 같지 않으므로 그렇게하지 않습니다.
Python은 동적 언어이기 때문에 Python 용 AOT 컴파일러를 수행하는 것은 훨씬 더 어렵습니다.
shedskin-실험적인 (restricted-Python) -to-C ++ 컴파일러 , Python의 제한된 하위 집합을 대신 사용하여 정적으로 분석 할 수 있습니다.이 접근 방식은 다음과 유사합니다. PyPy의 기반이되는 RPython에서 가져온 것입니다.