우리 모두 알고 있듯이 Python은 효율적인 언어가 아닙니다. 또한 루핑은 모든 언어에서 매우 시간이 많이 걸리는 작업입니다. 간단한 단일 단계 작업에 1 단위 시간이 소요된다면 이 작업을 수만 번 반복하면 최종 소요 시간도 수만 배 증가합니다.
while과 for는 Python에서 루프를 구현하는 데 일반적으로 사용되는 두 가지 키워드입니다. 실제로 작동 효율성에는 차이가 있습니다. 예를 들어 다음 테스트 코드는:
import timeit def while_loop(n=100_000_000): 나는 = 0 초 = 0 나는 < s += 나 나는 += 1 반환하다 def for_loop(n=100_000_000): 초 = 0 범위(n)에 있는 i의 경우: s += 나 반환하다 데프 메인(): print('while looptt', timeit.timeit(while_loop, number=1)) print('for looptt', timeit.timeit(for_loop, number=1)) __name__ == '__main__'인 경우: 기본() # => while 루프 4.718853999860585 # => for loop 3.211570399813354
1부터 n까지의 모든 자연수의 합을 계산하는 간단한 합 연산입니다. for 루프가 while보다 1.5초 더 빠른 것을 볼 수 있습니다.
가장 큰 차이점은 둘 사이의 메커니즘이 다르다는 것입니다.
각 루프에서 while은 실제로 for보다 두 단계를 더 수행합니다: 경계 검사 및 변수 i 증분. 즉, 루프가 수행될 때마다 while은 경계 검사(i
import timeit def while_loop(n=100_000_000): 나는 = 0 초 = 0 나는 < s += 나 나는 += 1 반환하다 def for_loop(n=100_000_000): 초 = 0 범위(n)에 있는 i의 경우: s += 나 반환하다 def 합계_범위(n=100_000_000): 반환 합계(범위(n)) 데프 메인(): print('while looptt', timeit.timeit(while_loop, number=1)) print('for looptt', timeit.timeit(for_loop, number=1)) print('합계 범위', timeit.timeit(sum_range, number=1)) __name__ == '__main__'인 경우: 기본() # => while 루프 4.718853999860585 # => 루프 3.211570399813354 # => sum range0.8658821999561042
내장 함수 sum을 사용하여 루프를 교체한 후 코드 실행 효율성이 두 배로 향상되었음을 알 수 있습니다.
내장 함수 sum의 누적 연산은 실제로 루프이지만 C 언어로 구현된 반면, for 루프의 합 연산은 순수 Python으로 수행됩니다. code s += 깨달았습니다. C > 파이썬.
생각의 폭을 넓혀보세요. 우리 모두는 어린 시절 가우스가 1부터 100까지의 합을 계산하는 독창적인 이야기를 듣고 자랐습니다.1…100의 합은 (1 + 100) * 50과 같습니다. 이 계산 방법은 위의 합산 연산에도 적용될 수 있습니다.
import timeit def while_loop(n=100_000_000): 나는 = 0 초 = 0 나는 < s += 나 나는 += 1 반환하다 def for_loop(n=100_000_000): 초 = 0 범위(n)에 있는 i의 경우: s += 나 반환하다 def 합계_범위(n=100_000_000): 반환 합계(범위(n)) def math_sum(n=100_000_000): 반환 (n * (n - 1)) // 2 데프 메인(): print('while looptt', timeit.timeit(while_loop, number=1)) print('for looptt', timeit.timeit(for_loop, number=1)) print('sum rangett', timeit.timeit(sum_range, number=1)) print('수학 합계', timeit.timeit(math_sum, 숫자=1)) __name__ == '__main__'인 경우: 기본() # => while 루프 4.718853999860585 # => 루프 3.211570399813354 # => 합계 범위0.8658821999561042 # => math sum 2.400018274784088e-06
math sum의 최종 실행 시간은 약 2.4e-6으로 수백만 배 단축됩니다. 여기서 아이디어는 루프의 효율성이 낮기 때문에 코드 조각을 수억 번 실행해야 한다는 것입니다.
루프를 실행하지 말고 수학 공식을 사용하여 수억 개의 루프 작업을 단 한 단계로 전환하세요. 이전과는 비교할 수 없을 정도로 효율성이 자연스럽게 향상되었습니다.
최종 결론(약간 수수께끼):
루프를 구현하는 가장 빠른 방법 - - — ——루프를 사용하지 마세요
Python의 경우 내장 함수를 최대한 사용하여 루프에서 순수 Python 코드를 최소화하세요.
위 내용은 가장 빠른 Python 루프 방법은 이해를 뒤집을 수 있습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!