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

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • Droid Life

    Droid Life

    17 Kasım 2009
  • Hidden Wolf TV

    Hidden Wolf

    1 EKİM 2009