안녕하세요 여러분, 저는 somenzz입니다. 오늘은 Python에서 가장 빠른 루프 방법을 공부하겠습니다.
예를 들어, 1부터 1억까지 누적하는 간단한 작업이 있습니다. 다음과 같이 최소 7가지 방법으로 달성할 수 있습니다.
def while_loop(n=100_000_000): i = 0 s = 0 while i < n: s += i i += 1 return s
def for_loop(n=100_000_000): s = 0 for i in range(n): s += i return s
def sum_range(n=100_000_000): return sum(range(n))
def sum_generator(n=100_000_000): return sum(i for i in range(n))
def sum_list_comp(n=100_000_000): return sum([i for i in range(n)])
import numpy def sum_numpy(n=100_000_000): return numpy.sum(numpy.arange(n, dtype=numpy.int64))
import numpy def sum_numpy_python_range(n=100_000_000): return numpy.sum(range(n))
위 7가지 메소드로 얻은 결과는 동일하지만 소요되는 시간이 다릅니다. 어느 메소드가 가장 빠른지 추측해 보고 다음 코드의 실행 결과를 보면 됩니다.
import timeit def main(): l_align = 25 print(f'{"1、while 循环":<{l_align}} {timeit.timeit(while_loop, number=1):.6f}') print(f"{'2、for 循环':<{l_align}}{timeit.timeit(for_loop, number=1):.6f}") print(f'{"3、sum range":<{l_align}} {timeit.timeit(sum_range, number=1):.6f}') print(f'{"4、sum generator":<{l_align}} {timeit.timeit(sum_generator, number=1):.6f}') print(f'{"5、sum list comprehension":<{l_align}} {timeit.timeit(sum_list_comp, number=1):.6f}') print(f'{"6、sum numpy":<{l_align}} {timeit.timeit(sum_numpy, number=1):.6f}') print(f'{"7、sum numpy python range":<{l_align}} {timeit.timeit(sum_numpy_python_range, number=1):.6f}') if __name__ == '__main__': main()
실행 결과는 다음과 같습니다.
for과 while은 본질적으로 동일한 작업을 수행하지만 while은 순수한 Python 코드이고, 변수 증가 및 경계 확인을 위한 C 확장 호출의 경우 CPython 인터프리터를 알고 있습니다. C 언어로 작성되었으며, Python 코드는 C 코드보다 느리고, for 루프는 C를 나타내고, while 루프는 Python을 나타내므로 for가 while보다 빠릅니다.
numpy는 주로 C로 작성되었습니다. 동일한 함수는 확실히 numpy보다 빠릅니다. 마찬가지로 numpy의 arange도 Python의 범위보다 확실히 빠릅니다.
Numpy의 합계는 Python의 범위와 함께 사용되며 결과가 가장 깁니다. 방법 7을 참조하세요. 방법 6과 같이 작업을 완료하려면 numpy 패키지를 사용하는 것이 가장 좋습니다.
생성기는 게으르고 한 번에 1억 개의 숫자를 생성하지 않는 반면, 목록 이해는 모든 숫자를 한 번에 할당합니다. 높은 메모리 사용량은 말할 것도 없고 아직 효율적이지 않습니다. 캐시가 부족하므로 성능이 약간 떨어집니다.
위 내용은 Python에서 얼마나 많은 빠른 반복 방법을 알고 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!