아이디어를 벤치 마크하거나 프로필을 작성하려면 파이썬에 내장 된 및 timeit
라이브러리를 사용해보십시오. Windows 7 x64에서 Python 2.7
을 사용하고 있습니다. 생산
import copy
import dis
import timeit
def method_one():
def add_one(i):
return i+1
orig_tuple = (1, 0, 0)
new_tuple = (add_one(element) for element in orig_tuple)
def method_two():
def add_one(i):
return i+1
orig_tuple = (1, 0, 0)
new_tuple = copy.deepcopy(orig_tuple)
for i in new_tuple:
i = add_one(i)
print dis.dis(method_one)
print timeit.timeit(method_one, number=10000)
print dis.dis(method_two)
print timeit.timeit(method_two, number=10000)
: 당신이 볼 수 있듯이
D:\Users\user>python help.py
6 0 LOAD_CONST 1 (<code object add_one at 01DA6B60, file "help.py", line 6
>)
3 MAKE_FUNCTION 0
6 STORE_DEREF 0 (add_one)
9 9 LOAD_CONST 5 ((1, 0, 0))
12 STORE_FAST 0 (orig_tuple)
10 15 LOAD_CLOSURE 0 (add_one)
18 BUILD_TUPLE 1
21 LOAD_CONST 4 (<code object <genexpr> at 01DA6CC8, file "help.py", line
10>)
24 MAKE_CLOSURE 0
27 LOAD_FAST 0 (orig_tuple)
30 GET_ITER
31 CALL_FUNCTION 1
34 STORE_FAST 1 (new_tuple)
37 LOAD_CONST 0 (None)
40 RETURN_VALUE
None
0.0088386
13 0 LOAD_CONST 1 (<code object add_one at 020C6F50, file "help.py", line 1
3>)
3 MAKE_FUNCTION 0
6 STORE_FAST 0 (add_one)
16 9 LOAD_CONST 4 ((1, 0, 0))
12 STORE_FAST 1 (orig_tuple)
17 15 LOAD_GLOBAL 0 (copy)
18 LOAD_ATTR 1 (deepcopy)
21 LOAD_FAST 1 (orig_tuple)
24 CALL_FUNCTION 1
27 STORE_FAST 2 (new_tuple)
18 30 SETUP_LOOP 26 (to 59)
33 LOAD_FAST 2 (new_tuple)
36 GET_ITER
>> 37 FOR_ITER 18 (to 58)
40 STORE_FAST 3 (i)
19 43 LOAD_FAST 0 (add_one)
46 LOAD_FAST 3 (i)
49 CALL_FUNCTION 1
52 STORE_FAST 3 (i)
55 JUMP_ABSOLUTE 37
>> 58 POP_BLOCK
>> 59 LOAD_CONST 0 (None)
62 RETURN_VALUE
None
0.1026118
는 훨씬 빠르다는 것을 발전기를 만드는 것 같습니다. method_two
은 내가하고 싶은 것을 할 수 있도록 내 머리 꼭대기에서 생각할 수있는 유일한 다른 방법이었습니다. 다른 아이디어가 있다면 의견을 테스트하고 질문이 있으면 의견을 편집하십시오.
이것은 목록 이해가 아니며 발전기 표현입니다. 그리고'timeit'을 사용하여 얻을 수있는 여러 가지 접근 방식을 벤치마킹해야합니다. –