পার্লে অসীম লুপগুলি সম্পর্কে এই প্রশ্নের দ্বারা উত্সাহিত: যখন (1) বনাম। (;;) জন্য একটি গতি পার্থক্য আছে? , আমি অজগর একই অনুরূপ চালানোর সিদ্ধান্ত নিয়েছে। আমি প্রত্যাশা করেছিলাম যে সংকলকটি একই বাইট কোডটি উত্পন্ন করবে while(True): passএবং while(1): passএটি আসলে পাইথন ২.। তে এটি নয়।
নিম্নলিখিত লিপি:
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করা লক্ষণীয়ভাবে জটিল। কেন?
অন্যান্য প্রসঙ্গে, পাইথনটি Trueসমান 1:
>>> True == 1
True
>>> True + True
2
whileদু'জনকে আলাদা করে কেন ?
আমি লক্ষ্য করেছি যে পাইথন 3 অভিন্ন ক্রিয়াকলাপগুলি ব্যবহার করে বিবৃতিগুলি মূল্যায়ন করে:
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
বুলিয়ানদের মূল্যায়ন করার পথে পাইথন 3-তে কি কোনও পরিবর্তন আছে?