28 HAZİRAN 2012, PERŞEMBE
Neden Python kodunu daha hızlı bir işlev nedir?
def main():
for i in xrange(10**8):
pass
main()
Python çalışan kod bu parça
real 0m1.841s
user 0m1.828s
sys 0m0.012s
Eğer döngü için bir işlev içerisinde yer değil ama ancak
for i in xrange(10**8):
pass
o zaman çok daha uzun bir süre için çalışır:
real 0m4.543s
user 0m4.524s
sys 0m0.012s
Neden bu?
Not: zamanlama Linux BASH zaman fonksiyonu ile yapılır.
CEVAP
28 HAZİRAN 2012, PERŞEMBE
Bir işlev içinde, bayt kodu
2 0 SETUP_LOOP 20 (to 23)
3 LOAD_GLOBAL 0 (xrange)
6 LOAD_CONST 3 (100000000)
9 CALL_FUNCTION 1
12 GET_ITER
>> 13 FOR_ITER 6 (to 22)
16 STORE_FAST 0 (i)
3 19 JUMP_ABSOLUTE 13
>> 22 POP_BLOCK
>> 23 LOAD_CONST 0 (None)
26 RETURN_VALUE
Üst düzeyde, bayt kodu
1 0 SETUP_LOOP 20 (to 23)
3 LOAD_NAME 0 (xrange)
6 LOAD_CONST 3 (100000000)
9 CALL_FUNCTION 1
12 GET_ITER
>> 13 FOR_ITER 6 (to 22)
16 STORE_NAME 1 (i)
2 19 JUMP_ABSOLUTE 13
>> 22 POP_BLOCK
>> 23 LOAD_CONST 2 (None)
26 RETURN_VALUE
Fark STORE_FAST
daha hızlı olmasıdır (!) STORE_NAME
daha. Bu işlevi nedeniyle, i
yerel bir ancak üst düzey bir küresel.
Bayt kodu incelemek, dis
module kullanın. İşlevi doğrudan sökmeye, ama compile
builtin kullanmak zorunda kaldım üst düzey kod sökmeye başardı.
Bunu Paylaş:
Neden bir işlev çağrısı daha hızlı ola...
Neden python pandalar birleştirir daha...
Python: neden * * * daha hızlı ve daha...
Neden hedef daha hızlı işlev, hedef'in...
Neden aralığında loop() Python bir sür...