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

  • H3Ctic (old channel)

    H3Ctic (old

    23 Mart 2011
  • Joshua Kywn

    Joshua Kywn

    17 Mayıs 2010
  • Samantha Crain

    Samantha Cra

    30 EKİM 2008