पर्ल में अनंत छोरों के बारे में इस सवाल से प्रेरित: जबकि (1) बनाम। (;) के लिए गति में अंतर है? , मैंने अजगर में एक समान तुलना चलाने का फैसला किया। मुझे उम्मीद थी कि कंपाइलर के लिए समान बाइट कोड उत्पन्न होगा while(True): passऔर while(1): pass, लेकिन यह वास्तव में python2.7 में ऐसा नहीं है।
निम्नलिखित स्क्रिप्ट:
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)
निम्नलिखित परिणाम उत्पन्न करता है:
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अधिक जटिल है। ऐसा क्यों है?
अन्य संदर्भों में, अजगर True1 के बराबर काम करता है :
>>> True == 1
True
>>> True + True
2
whileदोनों में अंतर क्यों करता है ?
मैंने देखा कि python3 समान कार्यों का उपयोग करके कथनों का मूल्यांकन करता है:
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
क्या python3 में बूलियन के मूल्यांकन के तरीके में बदलाव होता है?