CodeBlanks Logo Icon CodeBlanks

ast.walk

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

main.py
# ağacı çözümle ve düğümleri gez
# say ve sonucu yazdır

Örnek çözüm

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

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

Soru
for node in ____(tree):
    print(type(node).__name__)
Cevap
for node in ast.walk(tree):
    print(type(node).__name__)

Açıklama: ast.walk(tree) tüm düğümleri gezer.

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