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

  • BenjiManTV

    BenjiManTV

    20 Mart 2011
  • Peyton

    Peyton

    28 Aralık 2008
  • stewmurray47

    stewmurray47

    1 Kasım 2006