정말 포함 어떤 상황에서도 빠르다는 뜻인가요?검증해 봤는데 재미있었어요.

개시하다


게임에서 "파이톤으로 만든 탄성체 체 체"이라는 글을 썼지만, 논평에서 지적되고 개선됐다.그 댓글 중에.
그나저나 데이터=list(range(2,n+1))도 쓸 수 있지만 좀 늦을 것 같아요.
위에 쓰여 있다.저도 리스트 대상에 출연한 배우가 포괄적인 형태로 전개되는 것보다 느리다고 생각했는데 제대로 검증된 적이 없어서 한번 해보고 싶었어요.

역어셈블리


디스크 모듈를 사용하여 CPython 바이트 코드를 역조립할 수 있어서 해봤어요.
>>> from dis import dis
>>> def hoge():
...     return [i for i in range(10)]
... 
>>> dis(hoge)
  2           0 LOAD_CONST               1 (<code object <listcomp> at 0x---------, file "<stdin>", line 2>)
              2 LOAD_CONST               2 ('hoge.<locals>.<listcomp>')
              4 MAKE_FUNCTION            0
              6 LOAD_GLOBAL              0 (range)
              8 LOAD_CONST               3 (10)
             10 CALL_FUNCTION            1
             12 GET_ITER
             14 CALL_FUNCTION            1
             16 RETURN_VALUE
>>> def foo():
...     return list(range(10))
... 
>>> dis(foo)
  2           0 LOAD_GLOBAL              0 (list)
              2 LOAD_GLOBAL              1 (range)
              4 LOAD_CONST               1 (10)
              6 CALL_FUNCTION            1
              8 CALL_FUNCTION            1
             10 RETURN_VALUE
※ "0x------"은 스토리지 주소에 숨겨져 있습니다.
그 결과 절차수list(range(10))가 적은 것으로 나타났다.내부 쓰기 방식이 비교적 빠르다고 이해하는 것은 잘못된 것일지도 모른다는 것이다.

실제로 측정해 볼게요.


따라서 우리는 아래의 소스 코드로 검증을 진행하였다.
# -* -coding:utf-8 -*-
import time
from dis import dis
import numpy as np
from matplotlib import pyplot as plt


def when_list(n):
    return list(range(2, n + 1))


def when_inner(n):
    return [i for i in range(2, n + 1)]


def measurement():
    list_time = []
    inner_time = []
    count = []
    for i in range(1, 100):
        n = (i + 1) * 10
        s_time = time.time()
        when_list(n)
        list_time.append(time.time() - s_time)
        s_time = time.time()
        when_inner(n)
        inner_time.append(time.time() - s_time)
        count.append(n)
    plt.subplot(111)
    plt.plot(np.array(count), np.array(list_time), label="list")
    plt.plot(np.array(count), np.array(inner_time), label="inner")
    leg = plt.legend(loc='best', ncol=2, mode="expand", shadow=True, fancybox=True)
    leg.get_frame().set_alpha(0.5)
    plt.show()


def main():
    measurement()


if __name__ == '__main__':
    main()

실증적 결과


우리의 결과는 아래와 같다.(이미 10회 취득했다.)










결론


실증 결과를 보면 최초의 이해가 틀렸다는 것을 알 수 있다.
그래서 나는 표기를 포함하는 것이 항상 빠른 것은 아니라는 것을 알게 되었다.
그러나 타임 함수의 측정 정밀도가 좋지 않기 때문에 수치의 포함으로 이렇게 느리다는 것은 매우 어렵다.

좋은 웹페이지 즐겨찾기