Her 3 örnekte de gördüğünüz , dilin gramer spesifikasyonunun ve kaynak kodda karşılaşılan belirteçlerin ayrıştırma ağacını oluşturmak için nasıl ayrıştırıldığının bir sonucudur .
Bu düşük seviyeli koda bir göz atmak, kaputun altında ne olduğunu anlamanıza yardımcı olacaktır. Bu python ifadelerini alıp bayt koduna dönüştürebilir ve ardından dis
modülü kullanarak derlemeyi çözebiliriz :
Dava 1: (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)
önce ilk ile karşılaştırılır 0
ve değerlendirilir False
. Daha sonra bu sonuçla bir demet oluşturulur ve son olarak 0
elde edersiniz (False, 0)
.
Durum 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
İlk eleman olarak bir demet oluşturulur . İkinci eleman için, ilk durumda olduğu gibi aynı kontrol yapılır ve değerlendirilir False
, böylece elde edersiniz (0, False)
.
Durum 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
Burada gördüğünüz gibi, sadece bu iki (0, 0)
demeti karşılaştırıp geri dönüyorsunuz True
.