CodeBlanks Logo Icon CodeBlanks

Özet - AST

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

main.py
# fonksiyon listelayıcı yaz
# ağacı gez ve isimleri yazdır

Örnek çözüm

main.py
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

Soru
class FunctionLister(ast.NodeVisitor):
    def visit_FunctionDef(self, node):
        print(node.____)
        self.generic_visit(node)
Cevap
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.

Uzman bölümündeki tüm dersler