Python, derleyici ve yorumlayıcı arasındaki uyumu sağlayan bir dildir. Python’da yerleşik olarak bulunan compile ve exec fonksiyonları sayesinde, Python kodları dinamik olarak derlenip yürütülebilir. Bu makalede, Python’daki compile ve exec fonksiyonlarının nasıl kullanılacağını ve işlevlerini inceleyeceğiz.
Compile Fonksiyonu
compile fonksiyonu, Python’da geçerli bir kod parçasını derler ve Python bytecode’a dönüştürür. Bu bytecode daha sonra exec veya eval gibi fonksiyonlar ile çalıştırılabilir. compile fonksiyonunun temel sözdizimi şu şekildedir:
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
Parametreler:
-
source: İşlenmesi gereken kaynak kodu (string, ast.AST veya bytecode)
-
filename: Hata mesajlarında kullanılacak olan dosya adı
-
mode: Derleme modu, ‘exec’, ‘eval’ veya ‘single’ olabilir
-
flags (isteğe bağlı): Kodun derlenirken nasıl optimize edileceğini belirleyen bayraklar
-
dont_inherit (isteğe bağlı): Eğer True ise, derlenen kod mevcut bayrakları kullanmaz
-
optimize (isteğe bağlı): Optimizasyon seviyesini belirler (-1, 0, 1 veya 2)
Exec Fonksiyonu
exec fonksiyonu, Python’da dinamik olarak çalıştırılabilir kodları yürütmek için kullanılır. Temel sözdizimi şu şekildedir:
Parametreler:
-
object: compile fonksiyonu ile derlenmiş bir Python nesnesi veya yürütülebilir bir Python ifadesi
-
globals (isteğe bağlı): Global değişkenler için kullanılacak sözlük
-
locals (isteğe bağlı): Yerel değişkenler için kullanılacak sözlük
Compile ve Exec Örnekleri
Örnek 1: Basit Kod Derleme ve Çalıştırma
# Kaynak kodu derleme source_code = "print('Hello, World!')" bytecode = compile(source_code, "example.py", "exec") # Derlenen kodu çalıştırma exec(bytecode)
Örnek 2: Fonksiyon Tanımlama ve Çağırma
source_code = """ def greeting(name): return f'Hello, {name}!' name = 'John Doe' print(greeting(name)) """ bytecode = compile(source_code, "example.py", "exec") exec(bytecode)
Örnek 3: Global ve Yerel Değişkenlerle Çalışma
source_code = """ x = 10 y = 20 result = x + y """ bytecode = compile(source_code, "example.py", "exec") global_vars = {"x": 5, "y": 15} local_vars = {} exec(bytecode, global_vars, local_vars) print("Global x:", global_vars["x"]) print("Global y:", global_vars["y"]) print("Result:", local_vars["result"])
Yukarıdaki örnekte, global_vars ve local_vars adlı iki sözlük oluşturduk. Bu sözlükleri exec fonksiyonuna globals ve locals parametreleri olarak verdik. Bu sayede, çalıştırılan kodun global ve yerel değişkenlerini kontrol edebiliriz.
Sonuç olarak, Python’daki compile ve exec fonksiyonları, dinamik olarak kod derlemesi ve yürütülmesi için güçlü araçlar sunar. Bu sayede, uygulamalarınızda esneklik ve yeniden kullanılabilirlik sağlayarak daha etkili ve özelleştirilebilir çözümler geliştirebilirsiniz.