Bir Python modülü (.py dosyası) çalıştırıldığında, içindeki en üst düzey ifadeler, yukarıdan aşağıya (baştan sona) göründükleri sırayla yürütülür. Bu, tanımlayana kadar bir şeye referans veremeyeceğiniz anlamına gelir. Örneğin, aşağıdakiler gösterilen hatayı oluşturacaktır:
c = a + b
a = 13
b = 17
Diğer birçok dilden farklı olarak def
ve class
ifadeler Python'da çalıştırılabilir - sadece bildirime dayalı değildir - bu nedenle bunlardan birine ya a
da b
bu gerçekleşene ve tanımlanana kadar başvuruda bulunamazsınız . İlk örneğinizin sorun yaşamasının nedeni budur - Kerma()
işlevi, def
ifadesi çalıştırılmadan ve gövdesi işlenmeden ve sonuçta ortaya çıkan işlev nesnesi işlevin adına bağlanmadan önce başvuruyorsunuz , bu nedenle kodda o noktada tanımlanmamıştır.
C ++ gibi dillerdeki programlar genellikle çalıştırılmadan önce #include
işlenir ve bu derleme aşamasında programın tamamı ve başvurduğu dosyalar bir kerede okunur ve işlenir. Python'dan farklı olarak, bu dil, kullanımdan önce işlevlerin adının ve çağırma sırasının (veya statik değişken türünün) bildirilmesine (ancak tanımlanmamasına) izin veren bildirimsel ifadeler içerir, böylece derleyici adlarıyla karşılaştığında, bunları kontrol etmek için yeterli bilgiye sahip olur. birincil olarak tür denetimi ve tür dönüştürmeyi gerektiren kullanım, bunların hiçbiri gerçek içeriklerinin veya kod gövdelerinin henüz tanımlanmış olmasını gerektirmez.