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
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.
Neden >= yanlış zaman == null değer...
Neden bu Scala kod için küçük bir deği...
C/C < ne neden olur;, <= ve == tr...
Neden char[] şifreler için Dize Java t...
Neden&; dizi yineleme için... "* o kad...