आप सभी 3 उदाहरणों में जो देखते हैं, वह भाषा के व्याकरण विनिर्देश का परिणाम है , और स्रोत कोड में सामने आने वाले टोकन को पार्स ट्री बनाने के लिए पार्स किया जाता है।
इस निम्न स्तर के कोड पर एक नज़र डालते हुए आपको यह समझने में मदद करनी चाहिए कि हुड के नीचे क्या होता है। हम इन अजगर बयानों को ले सकते हैं, उन्हें बाइट कोड में बदल सकते हैं और फिर dis
मॉड्यूल का उपयोग करके उन्हें विघटित कर सकते हैं :
मामला एक: (0, 0) == 0, 0
>>> dis.dis(compile("(0, 0) == 0, 0", '', 'exec'))
1 0 LOAD_CONST 2 ((0, 0))
3 LOAD_CONST 0 (0)
6 COMPARE_OP 2 (==)
9 LOAD_CONST 0 (0)
12 BUILD_TUPLE 2
15 POP_TOP
16 LOAD_CONST 1 (None)
19 RETURN_VALUE
(0, 0)
पहले की तुलना में 0
सबसे पहले है और इसका मूल्यांकन किया जाता है False
। तब इस परिणाम के साथ एक ट्यूपल का निर्माण किया जाता है 0
, इसलिए आप प्राप्त करते हैं (False, 0)
।
केस 2: 0, 0 == (0, 0)
>>> dis.dis(compile("0, 0 == (0, 0)", '', 'exec'))
1 0 LOAD_CONST 0 (0)
3 LOAD_CONST 0 (0)
6 LOAD_CONST 2 ((0, 0))
9 COMPARE_OP 2 (==)
12 BUILD_TUPLE 2
15 POP_TOP
16 LOAD_CONST 1 (None)
19 RETURN_VALUE
0
पहले तत्व के रूप में एक टपल का निर्माण किया जाता है। दूसरे तत्व के लिए, पहले मामले की तरह ही जांच की जाती है और मूल्यांकन किया जाता है False
, इसलिए आप प्राप्त करते हैं (0, False)
।
केस 3: (0, 0) == (0, 0)
>>> dis.dis(compile("(0, 0) == (0, 0)", '', 'exec'))
1 0 LOAD_CONST 2 ((0, 0))
3 LOAD_CONST 3 ((0, 0))
6 COMPARE_OP 2 (==)
9 POP_TOP
10 LOAD_CONST 1 (None)
13 RETURN_VALUE
यहाँ, जैसा कि आप देख रहे हैं, आप केवल उन दो (0, 0)
टुपल्स की तुलना कर रहे हैं और वापस लौट रहे हैं True
।