SORU
28 EYLÜL 2010, Salı


while (1) Vs. while(True) için Neden bir fark var mı?

Perl ile sonsuz döngü hakkında bu soru ilgimi çekti:* *22, python ile benzer bir karşılaştırma çalıştırmaya karar verdim. Derleyici while(True): pass while(1): pass, aynı bayt kodu oluşturmak olacağını bekliyordum ama bu aslında python2 durumda değil.7.

Aşağıdaki komut:

import dis

def while_one():
    while 1:
        pass

def while_true():
    while True:
        pass

print("while 1")
print("----------------------------")
dis.dis(while_one)

print("while True")
print("----------------------------")
dis.dis(while_true)

aşağıdaki sonuçlar üretir:

while 1
----------------------------
  4           0 SETUP_LOOP               3 (to 6)

  5     >>    3 JUMP_ABSOLUTE            3
        >>    6 LOAD_CONST               0 (None)
              9 RETURN_VALUE        
while True
----------------------------
  8           0 SETUP_LOOP              12 (to 15)
        >>    3 LOAD_GLOBAL              0 (True)
              6 JUMP_IF_FALSE            4 (to 13)
              9 POP_TOP             

  9          10 JUMP_ABSOLUTE            3
        >>   13 POP_TOP             
             14 POP_BLOCK           
        >>   15 LOAD_CONST               0 (None)
             18 RETURN_VALUE        

while True kullanarak önemli ölçüde daha karmaşıktır. Neden bu?

Diğer bağlamlarda, python True 1 eşittir gibi yapıyor:

>>> True == 1
True

>>> True   True
2

Neden while iki ayırt ediyor mu?

Python3 ifadeleri aynı işlemleri kullanarak değerlendiriyor fark ettim:

while 1
----------------------------
  4           0 SETUP_LOOP               3 (to 6) 

  5     >>    3 JUMP_ABSOLUTE            3 
        >>    6 LOAD_CONST               0 (None) 
              9 RETURN_VALUE         
while True
----------------------------
  8           0 SETUP_LOOP               3 (to 6) 

  9     >>    3 JUMP_ABSOLUTE            3 
        >>    6 LOAD_CONST               0 (None) 
              9 RETURN_VALUE         

Boolean değerleri değerlendirilir yolu python3 bir değişiklik var mı?

CEVAP
28 EYLÜL 2010, Salı


Python 2'de.x True bir kelime, ama bool tip 1 olarak tanımlanan built-in global constant sadece bir değil. Bu nedenle, yorumlayıcı hala True içeriğini yüklemek zorundadır. Başka bir deyişle, True olduğunu reassignable:

Python 2.7 (r27:82508, Jul  3 2010, 21:12:11) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> True = 4
>>> True
4

Python 3'te.x, it truly becomes a keyword ve bir gerçek sabit:

Python 3.1.2 (r312:79147, Jul 19 2010, 21:03:37) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> True = 4
  File "<stdin>", line 1
SyntaxError: assignment to keyword

böylece yorumlayıcı sonsuz bir döngü ile while True: döngü değiştirin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CaliforniaMetin

    CaliforniaMe

    3 ŞUBAT 2013
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • Pepsi

    Pepsi

    1 Kasım 2005