15 Mayıs 2009, Cuma
Neden aralığında loop() Python bir süre döngü kullanarak daha hızlı?
Geçen gün bazı Python kıyaslama yapıyordum ve bir şey arasında ilginç geldim. Aşağıda daha fazla veya daha az aynı şeyi iki döngüler. Döngü 1 iki kat daha uzun döngü 2 olarak çalıştırılabilir.
Döngü 1:
int i = 0
while i < 100000000:
i = 1
Döngü 2:
for n in range(0,100000000):
pass
Neden ilk döngü çok yavaş gerçekleşiyor? Önemsiz bir örnek olduğunu biliyorum ama benim ilgi kırılmak. Orada dizi hakkında özel bir şey() bir değişken artırma daha verimli hale getirir aynı şekilde işlev?
CEVAP
15 Mayıs 2009, Cuma
python bayt kod çözümünü bakın, daha somut bir fikir alabilirsiniz
döngü: while kullanın
1 0 LOAD_CONST 0 (0)
3 STORE_NAME 0 (i)
2 6 SETUP_LOOP 28 (to 37)
>> 9 LOAD_NAME 0 (i) # <-
12 LOAD_CONST 1 (100000000) # <-
15 COMPARE_OP 0 (<) # <-
18 JUMP_IF_FALSE 14 (to 35) # <-
21 POP_TOP # <-
3 22 LOAD_NAME 0 (i) # <-
25 LOAD_CONST 2 (1) # <-
28 INPLACE_ADD # <-
29 STORE_NAME 0 (i) # <-
32 JUMP_ABSOLUTE 9 # <-
>> 35 POP_TOP
36 POP_BLOCK
Döngü gövdesi 10 op var
kullanım aralığı:
1 0 SETUP_LOOP 23 (to 26)
3 LOAD_NAME 0 (range)
6 LOAD_CONST 0 (0)
9 LOAD_CONST 1 (100000000)
12 CALL_FUNCTION 2
15 GET_ITER
>> 16 FOR_ITER 6 (to 25) # <-
19 STORE_NAME 1 (n) # <-
2 22 JUMP_ABSOLUTE 16 # <-
>> 25 POP_BLOCK
>> 26 LOAD_CONST 2 (None)
29 RETURN_VALUE
Döngü gövdesinin 3 op var
C kodu çalıştırmak için zaman intepretor göre çok daha kısa olduğunu ve göz ardı edilebilir.
Bunu Paylaş:
Neden Python kodunu daha hızlı bir işl...
Neden python pandalar birleştirir daha...
Python: neden * * * daha hızlı ve daha...
Kıyaslama - neden ikinci döngü daha hı...
Neden AddRange daha hızlı foreach döng...