2
내가 파이썬의 구조체 팩/압축 풀기 성능을 테스트하고 함수 안에 넣어 경우는 속도거야 주목하고 있습니다 :파이썬 구조체 팩 속도까지 내부 기능
import time
import struct
from io import BytesIO
def pack(b):
for i in range(10000000):
b.write(struct.pack('!i', i))
b = BytesIO()
start = time.time()
pack(b)
end = time.time()
print(end - start)
b2 = BytesIO()
start = time.time()
for i in range(10000000):
b2.write(struct.pack('!i', i))
end = time.time()
print(end - start)
는 실행이
2.639040946960449
3.0683419704437256
을 제공합니다 코드는 동일하지만 기능이 빠릅니다.
왜 이런가요?
이는 아마도 b에 대한 검색 때문일 수 있습니다. 함수 내에서 b는 매개 변수이며 런타임에서 로컬 객체 만 살펴 봐야하기 때문에 변수 찾아보기가 빠릅니다. 반면 함수 버전 외부에서는 b2가 전역 변수이므로 변수 이름 조회가 더 많은 단계를 거쳐야하고 더 오래 걸릴 수 있습니다. 함수 매개 변수 대신 b를 전역 변수로 지정하여 검사 할 수도 있습니다. 그렇게하면 성과가 훨씬 더 가까워 져야합니다. – toth
@toth 그냥 'b'arg를 제거하고 define 함수 아래에 'global b'를 추가하면 속도가 느려지고 컴퓨터에서 ~ 2.70이되지만 직접 실행보다 빠릅니다. – lxyu
흥미 롭다면 "i"를 글로벌하게 만들어야 할 것 같네요. – toth