ast.walk
- Python kursu
- Uzman
- Ders 14/47
- 5 dk
ast.walk ile ağacı gezme öğrenirsin.
ast.walk nedir?
ast.walk(tree) bir AST'nin tüm düğümlerini sırayla veren bir üreteçtir. Derinlik veya genişlik önemsizdir; tek istediğin her düğümü görmek ise idealdir.
Örneğin for node in ast.walk(tree): ile tüm düğümleri gezip isinstance(node, ast.Name) ile belli bir türü süzebilirsin. Bu, basit sayaç ve analiz araçları için yeterlidir. Daha kontrollü gezme için NodeVisitor kullanırsın; ama hızlı bir tarama için ast.walk en kısa yoldur.
Düğüm türlerini sayma
ast.walk ile belirli türdeki düğümleri saymak yaygın bir görevdir. Bir sayaç değişkeni başlatır, döngü içinde isinstance ile türü kontrol eder, eşleşince sayacı artırırsın.
Örneğin bir kodda kaç Name düğümü olduğunu bulmak, değişken kullanımını ölçmek için yararlıdır. Benzer şekilde ast.Call sayısı fonksiyon çağrılarının sıklığını gösterir. Bu tür ölçümler, kod kalıtesi araçlarının temelini oluşturur. Sonucu bir print ile raporlarsın.
Uygulama ast.walk ile düğüm say
import ast ile modülü içe aktar. ast.parse("a = 1\nb = 2\nc = 3") ile ağacı oluştur. ast.walk ile ağacı gez; isinstance(node, ast.Name) ile Name düğümlerini say. Sayaç değişkeni başlat ve her eşleşmede artır. Sonucu yazdır.
Başlangıç kodu
# ağacı çözümle ve düğümleri gez
# say ve sonucu yazdırÖrnek çözüm
import ast
tree = ast.parse("a = 1\nb = 2\nc = 3")
count = 0
for node in ast.walk(tree):
if isinstance(node, ast.Name):
count += 1
print(count)Beklenen çıktı
3
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 ast.walk kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
ast.walk |
Tüm düğümleri gezer |
for node in |
Döngü değişkeni |
isinstance |
Tür süzme |
tree |
Ağaç kökü |
2 ast.walk ne döndürür?
import ast
tree = ast.parse("x = 1")
for n in ast.walk(tree):
print(type(n).__name__)- Bir liste
- Bir üreteç (generator) Doğru cevap
- Bir düğüm
- Bir sözlük
Açıklama: bir üreteç. ast.walk her seferinde bir düğüm verir.
3 ast.walk çağrısını tamamla
for node in ____(tree):
print(type(node).__name__)
for node in ast.walk(tree):
print(type(node).__name__)
Açıklama: ast.walk(tree) tüm düğümleri gezer.