Debugging Decorator
Kod yazarken ve bu kodun tam olarak ne yaptığını anlamazken, fonksiyonların içine ara ara print serpiştiriyordum ki, neler döndüğünü görebileyim. Ancak malumunuz, bu printleri teker teker yazması, sonra teker teker silmesi bir hayli zahmetli bir işe dönüşebiliyor. Bu problemin üstesinden gelmek için, aşağıdaki decorator'u yazdım. İndirmek isteyenler debugging.py adresinden indirebilir.
Kullanımı çok basit. Örneğin şu kodu inceleyelim:
|
@debugging
|
|
def osman(ali, veli, mehmet, zeynep = 48):
|
|
ali = 129
|
|
return ali + veli
|
|
|
|
print osman(12,24,32)
|
Bu kod şöyle bir çıktı veriyor:
function osman called mehmet 32 zeynep 48 veli 24 ali 12 assigned new value to ali: 129 returning 153 153
Gördüğünüz üzere, önce çalışan fonksiyonun ismini yazıyor. Daha sonra local değişkenleri gösteriyor. Her atama yapıldığında, bunu da belirtiyor. Son olarak, return olacağı zaman, neyin return olduğunu
da gösteriyor. Fonksiyonu debug ettikten sonra da, @debugging
decorator'unu kaldırarak bu çıktıyı durdurabilirsiniz.
Nasıl çalışıyor peki bu?
Eğer decorator'lerle ilgili temel bilgileriniz yoksa, Decorator nedir yazısını okuyarak başlayabilirsiniz.
Bu decorator'de, hedef fonksiyonun ast
modülündeki fonksiyonları kullanarak syntax tree'sini oluşturdum. Syntax tree
üzerinde gezinip, gerekli gördüğüm yerlere print ifadeleri ekleyip, tekrar derledim.
Sizce bu decorator iş görür mü? Daha nasıl geliştirebilirim?