> 백엔드 개발 > 파이썬 튜토리얼 > Python 코드가 함수 내에서 실행될 때 더 빠른 이유는 무엇입니까?

Python 코드가 함수 내에서 실행될 때 더 빠른 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-15 13:17:03
원래의
475명이 탐색했습니다.

Why is Python Code Faster When Executed Inside a Function?

함수에서 Python 코드가 더 빠르게 실행되는 이유는 무엇입니까?

루프를 1억 번 실행하는 아래 Python 코드 조각을 살펴보세요.

def main():
    for i in range(10**8):
        pass
main()
로그인 후 복사

Linux에서 time 함수를 사용하여 측정했을 때 이 코드는 놀라울 정도로 실행됩니다. 신속하게:

real    0m1.841s
user    0m1.828s
sys     0m0.012s
로그인 후 복사

신기하게도 for 루프가 함수 내에 포함되지 않고 실행되면:

for i in range(10**8):
    pass
로그인 후 복사

실행 시간이 상당히 늘어납니다:

real    0m4.543s
user    0m4.524s
sys     0m0.012s
로그인 후 복사

왜 이러한 불일치가 발생합니까?

Inside 함수

바이트코드를 조사하면 코드가 함수 내에 있을 때 다음이 드러납니다.

  2           0 SETUP_LOOP              20 (to 23)
              3 LOAD_GLOBAL              0 (xrange)
              6 LOAD_CONST               3 (100000000)
              9 CALL_FUNCTION            1
             12 GET_ITER            
        >>   13 FOR_ITER                 6 (to 22)
             16 STORE_FAST               0 (i)

  3          19 JUMP_ABSOLUTE           13
        >>   22 POP_BLOCK           
        >>   23 LOAD_CONST               0 (None)
             26 RETURN_VALUE        
로그인 후 복사

함수 외부

반대 , 코드가 최상위 레벨에서 실행될 때 바이트코드는 다음과 같습니다. 다음은 다음과 같습니다.

  1           0 SETUP_LOOP              20 (to 23)
              3 LOAD_NAME                0 (xrange)
              6 LOAD_CONST               3 (100000000)
              9 CALL_FUNCTION            1
             12 GET_ITER            
        >>   13 FOR_ITER                 6 (to 22)
             16 STORE_NAME               1 (i)

  2          19 JUMP_ABSOLUTE           13
        >>   22 POP_BLOCK           
        >>   23 LOAD_CONST               2 (None)
             26 RETURN_VALUE        
로그인 후 복사

문제의 핵심

STORE_FAST와 STORE_NAME의 사용 차이가 있습니다. STORE_FAST는 변수(이 경우 i)가 지역 변수(함수 내)인 경우에 사용되는 반면, STORE_NAME은 변수가 전역 변수(함수 외부)인 경우에 사용됩니다. 전자가 훨씬 더 효율적입니다.

이는 변수가 로컬로 선언되면 인터프리터가 해당 변수에 대한 특정 메모리 위치를 사용하도록 코드를 최적화할 수 있다는 사실로 설명할 수 있습니다. 그러나 변수가 전역으로 선언되면 인터프리터는 변수를 찾기 위해 전역 범위 전체를 검색해야 하므로 시간이 더 많이 소요됩니다.

위 내용은 Python 코드가 함수 내에서 실행될 때 더 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿