프로그래밍 언어/Python

Python 코드가 함수에서 더 빠르게 실행되는 이유

Rateye 2021. 9. 1. 10:33
728x90
반응형
질문 : Python 코드가 함수에서 더 빠르게 실행되는 이유는 무엇입니까?

def main():
    for i in xrange(10**8):
        pass
main()

Python의이 코드는 다음에서 실행됩니다 (참고 : 타이밍은 Linux의 BASH에서 시간 함수로 수행됩니다.)

real    0m1.841s
user    0m1.828s
sys     0m0.012s

그러나 for 루프가 함수 내에 위치하지 않으면

for i in xrange(10**8):
    pass

그런 다음 훨씬 더 오랜 시간 동안 실행됩니다.

real    0m4.543s
user    0m4.524s
sys     0m0.012s

왜 이런거야?

답변

전역 변수보다 지역 변수를 저장하는 것이 더 빠른 이유를 물을 수 있습니다. 이것은 CPython 구현 세부 사항입니다.

CPython은 인터프리터가 실행하는 바이트 코드로 컴파일됩니다. 함수를 컴파일 할 때, 로컬 변수는 고정 크기 어레이 (하지에 저장된 dict ) 및 변수 이름은 인덱스에 할당된다. 함수에 지역 변수를 동적으로 추가 할 수 없기 때문에 가능합니다. 그런 다음 지역 변수를 검색하는 것은 말 그대로 목록에 대한 포인터 조회와 사소한 PyObject

이것을 해시 등을 포함하는 dict 검색 인 글로벌 조회 ( LOAD_GLOBAL )와 대조하십시오. global i 를 지정해야하는 이유입니다 : 범위 내의 변수에 할당 한 적이 있다면 컴파일러는 당신이 지정하지 않는 한 액세스를 위해 STORE_FAST

그건 그렇고, 글로벌 조회는 여전히 꽤 최적화되어 있습니다. 속성 조회 foo.bar정말 느린 것입니다!

다음은 지역 변수 효율성에 대한 작은 그림입니다.

출처 : https://stackoverflow.com/questions/11241523/why-does-python-code-run-faster-in-a-function
728x90
반응형