정말 포함 어떤 상황에서도 빠르다는 뜻인가요?검증해 봤는데 재미있었어요.
개시하다
게임에서 "파이톤으로 만든 탄성체 체 체"이라는 글을 썼지만, 논평에서 지적되고 개선됐다.그 댓글 중에.
그나저나 데이터=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회 취득했다.)
결론
실증 결과를 보면 최초의 이해가 틀렸다는 것을 알 수 있다.
그래서 나는 표기를 포함하는 것이 항상 빠른 것은 아니라는 것을 알게 되었다.
그러나 타임 함수의 측정 정밀도가 좋지 않기 때문에 수치의 포함으로 이렇게 느리다는 것은 매우 어렵다.
Reference
이 문제에 관하여(정말 포함 어떤 상황에서도 빠르다는 뜻인가요?검증해 봤는데 재미있었어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fantm21/items/c121423e35e95fe5f32b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
디스크 모듈를 사용하여 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회 취득했다.)
결론
실증 결과를 보면 최초의 이해가 틀렸다는 것을 알 수 있다.
그래서 나는 표기를 포함하는 것이 항상 빠른 것은 아니라는 것을 알게 되었다.
그러나 타임 함수의 측정 정밀도가 좋지 않기 때문에 수치의 포함으로 이렇게 느리다는 것은 매우 어렵다.
Reference
이 문제에 관하여(정말 포함 어떤 상황에서도 빠르다는 뜻인가요?검증해 봤는데 재미있었어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fantm21/items/c121423e35e95fe5f32b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# -* -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회 취득했다.)
결론
실증 결과를 보면 최초의 이해가 틀렸다는 것을 알 수 있다.
그래서 나는 표기를 포함하는 것이 항상 빠른 것은 아니라는 것을 알게 되었다.
그러나 타임 함수의 측정 정밀도가 좋지 않기 때문에 수치의 포함으로 이렇게 느리다는 것은 매우 어렵다.
Reference
이 문제에 관하여(정말 포함 어떤 상황에서도 빠르다는 뜻인가요?검증해 봤는데 재미있었어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fantm21/items/c121423e35e95fe5f32b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(정말 포함 어떤 상황에서도 빠르다는 뜻인가요?검증해 봤는데 재미있었어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fantm21/items/c121423e35e95fe5f32b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)