SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • midomansour

    midomansour

    19 EYLÜL 2009
  • Tips On Linux

    Tips On Linu

    26 Temmuz 2008
  • Yo Mama

    Yo Mama

    18 EYLÜL 2005