함수를 사용한 Python 코드 성능 최적화
Python의 함수 내에서 특정 코드를 실행하면 실행 속도가 크게 향상되는 것으로 관찰되었습니다. 이 이상한 동작 뒤에 있는 이유를 조사해 보겠습니다.
처음에는 for 루프가 함수 내에 캡슐화되었습니다.
def main(): for i in xrange(10**8): pass main()
이 코드는 2초 이내에 완료되는 훌륭한 성능을 보여줍니다. 그러나 for 루프를 함수 내에 넣지 않고 독립적으로 실행하면
for i in xrange(10**8): pass
실행 시간이 4초 이상으로 치솟습니다. 이러한 불일치 뒤에 숨겨진 수수께끼를 풀기 위해서는 Python 인터프리터가 생성한 바이트코드를 조사해야 합니다.
함수의 바이트코드를 조사하면 변수 i가 STORE_FAST opcode를 사용하여 할당된다는 것을 알 수 있습니다.
LOAD_FAST 0 (i)
최상위 수준에서 for 루프가 실행되면 STORE_NAME opcode를 사용하여 변수 i가 할당됩니다.
STORE_NAME 1 (i)
결정적으로 STORE_FAST가 STORE_NAME보다 효율적인 작업이라는 것이 확립되었습니다. . 이러한 효율성은 i가 함수 내의 지역 변수(STORE_FAST 사용)일 때 스택 프레임에 저장된다는 사실에서 비롯됩니다. 반대로 i가 전역 변수(STORE_NAME 사용)인 경우 전역 변수 사전에 저장되어야 합니다.
바이트코드를 더 자세히 검사하려면 dis 모듈을 활용할 수 있습니다. 기능을 직접 분해하려면 dis 모듈을 사용할 수 있습니다. 그러나 최상위 수준에서 실행되는 코드를 디스어셈블리하려면 내장된 컴파일을 활용해야 합니다.
기본 바이트코드 작업을 이해함으로써 Python의 기능을 활용하여 코드 실행 속도를 효과적으로 최적화할 수 있습니다.
위 내용은 함수에 코드를 캡슐화하면 Python 성능이 향상되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!