Özet - AST
- Python kursu
- Uzman
- Ders 18/47
- 5 dk
parse, NodeVisitor ve compile'ı birleştirerek bir kod analiz aracı yazarsın.
Özet: AST araçları
Bu grupta AST araç zincirini öğrendin. ast.parse ile kodu ağaca çevirdin, ast.walk ile hızlı tarama yaptın, NodeVisitor ile düzenli gezdiniz.
NodeTransformer ile düğümleri değiştirdin, compile ile yeniden derleyip çalıştırdın. Şimdi bunları birleştirip bir kod analiz aracı yazacaksın: bir FunctionLister ziyaretçisi, ağaçtaki tüm fonksiyon tanımlarının adlarını yazdırsın. Bu, linter ve belgeleme araçlarının çekirdek fikridir.
Uygulama Kod analiz aracı yaz
import ast ile modülü içe aktar. FunctionLister(ast.NodeVisitor) sınıfı yaz. visit_FunctionDef(self, node) içinde print(node.name) yap ve self.generic_visit(node) çağır. ast.parse("def a():\n pass\ndef b():\n pass") ile ağacı oluştur ve FunctionLister().visit(tree) ile çalıştır.
Başlangıç kodu
# fonksiyon listelayıcı yaz
# ağacı gez ve isimleri yazdırÖrnek çözüm
import ast
class FunctionLister(ast.NodeVisitor):
def visit_FunctionDef(self, node):
print(node.name)
self.generic_visit(node)
tree = ast.parse("def a():\n pass\ndef b():\n pass")
FunctionLister().visit(tree)Beklenen çıktı
a b
Ne öğrendin?
Bu grupta Python'ın soyut sözdizimi ağacını derinlemesine inceledin. ast.parse ile kodu ağaca çevirmeyi, ast.walk ile hızlı tarama yapmayı öğrendin.
NodeVisitor ile düzenli gezme, NodeTransformer ile düğüm değiştirme ve compile ile yeniden derleme gördün. Özet derste bunları birleştirip bir kod analiz aracı yazdın. Bu bilgi, linter, biçimleyici ve kod üreteci yazmak için temeldir.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi araç hangi iş?
- ast.parse ile ağaç oluşturma
- NodeTransformer ile düğüm silme
- ast.walk ile düğüm değiştirme
- compile ile ağacı çalıştırma Doğru cevap
Açıklama: ast.walk yalnızca gezer, değiştirmez.
2 Tüm AST kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
ast.parse |
Ağaç üretir |
NodeVisitor |
Düzenli gezer |
NodeTransformer |
Düğüm değiştirir |
compile |
Koda çevirir |
3 Son boşluk
class FunctionLister(ast.NodeVisitor):
def visit_FunctionDef(self, node):
print(node.____)
self.generic_visit(node)
class FunctionLister(ast.NodeVisitor):
def visit_FunctionDef(self, node):
print(node.name)
self.generic_visit(node)
Açıklama: node.name fonksiyonun adını taşır.