Python’un compile()
işlevi, bir string olarak temsil edilen kaynak kodunu, daha sonra exec()
veya eval()
işlevleri kullanılarak çalıştırılabilecek bir kod nesnesine dönüştürmelerine olanak tanıyan güçlü bir araçtır. Böylece, çalışma zamanında dinamik olarak oluşturulan kodun yürütülmesine olanak tanır. Bu yazıda, compile()
fonksiyonunun ne yaptığını, nasıl çalıştığını ve Python kodunuzda nasıl kullanılacağını örneklerle inceleyeceğiz. Ayrıca compile()
fonksiyonu için bazı yaygın kullanım durumlarını ve kodunuzu optimize etmek ve özel, alana özgü diller oluşturmak için nasıl kullanılabileceğini tartışacağız.
compile() fonksiyonu ne işe yarar
Python’daki compile()
işlevi, bir string olarak temsil edilen kodu, daha sonra exec()
veya eval()
işlevleri kullanılarak çalıştırılabilecek bir kod nesnesine dönüştürmek için kullanılır. Dolayısıyla, kodun içine sabit olarak kodlanmak yerine çalışma zamanında dinamik olarak oluşturulan kodun yürütülmesine olanak tanır.
İşlev nasıl çalışır ve sözdizimi nedir?
compile()
fonksiyonunun söz dizimi aşağıdaki gibidir:
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
source
: derlenecek kaynak kodunu içeren bir dizefilename
: kodun okunduğu dosyanın adını belirten bir dize (hata mesajları için kullanılır)mode
: derlenecek kodun türünü belirten bir dize (örneğin bir modül için ‘exec’, bir ifade için ‘eval’, tek bir deyim için ‘single’)flags
: derleyiciye iletilecek ek bayrakları belirten isteğe bağlı bir tamsayıdont_inherit
: kodun çağıranın ortamını miras alıp almayacağını belirten isteğe bağlı bir booleanoptimize
: koda uygulanacak optimizasyon seviyesini belirten isteğe bağlı bir tamsayı
Örnekle fonksiyonun kullanımı
Örnek 1: Basit bir matematiksel ifadenin derlenmesi ve yürütülmesi
# değişken tanımlama
hesap = "2 + 3"
# kodun derlenmesi
kod = compile(hesap, '<string>', 'eval')
# kodun çalıştırılması
sonuc = eval(kod)
print(sonuc) #
Çıktı: 5
Örnek 2: Bir kod bloğunun derlenmesi ve çalıştırılması
# değişken tanımlama
kod_blok = """
a = 2
b = 3
c = a + b
print(c)
"""
# kodun derlenmesi
kod = compile(kod_blok, '<string>', 'exec')
# kodun çalıştırılması
exec(kod) #
Çıktı: 5
Örnek 3: Kullanıcı girdisi ile kod derleme ve çalıştırma
# değişken tanımlama
kod = "a = int(input('
Lütfen bir sayı girin: '))"
# kodun derlenmesi
kod_objesi = compile(kod, '<string>', 'single')
# kodun çalıştırılması
exec(kod_objesi)
print(a) #
Çıktı: (
kullanıcı girdisi)
Örnek 4: Kodun fonksiyon ile derlenmesi ve çalıştırılması
# değişken tanımlama
fonksiyon = """
def topla(a, b):
return a + b
x = 2
y = 3
sonuc = topla(x, y)
print(sonuc)
"""
# kodun derlenmesi
kod = compile(fonksiyon, '<string>', 'exec')
# kodun çalıştırılması
exec(kod) #
Çıktı: 5
Örnek 5: Kod nesnesinin derlenmesi ve değişkene kaydedilmesi
# değişken tanımlama
kod_blok = """
a = 2
b = 3
c = a + b
print(c)
"""
# kodun derlenmesi
kod_objesi = compile(kod_blok, '<string>', 'exec')
# kod objesinin kullanılması
exec(kod_objesi) #
Çıktı: 5
Uygulama açısından bu işlev için yaygın kullanım durumları nelerdir?
- Etkileşimli kabuklar veya komut dosyası ortamları gibi çalışma zamanında dinamik olarak kod üretme ve yürütme
- Kullanıcı girdisi gibi güvenilmeyen kaynaklardan gelen kodun yürütülmesini sağlama
- Yürütmeden önce kodu önceden derleyerek kod yürütmeyi optimize etme
- Özelleşmiş, alana özgü dillerin oluşturulmasına izin verilmesi