Bugün ki konumuzda eval fonksiyonunu işleyeceğiz. Genellikle python programlamaya başlayan yeni arkadaşlarımız bu fonksiyonu kullanarak hesaplama işlemleri yapmaktadır oysa ki eval komutu filtrelemeden geçirmeden kullanmak büyük bir hatadır aşağıda örnek olarak yazdığım eval kullanılmamış bir hesap makinesini inceleyelim ve evalda ki gibi sınırsız veri girişi yapalım(tabi ki toplama fonksiyonunu çağırdıktan sonra bu kodda aynı anda toplama dışında ki diğer işlemleri yapamıyoruz ufak tefek eklemelerle gayet rahat yapılabilir)
yukarıda basitçe classtan ürettiğimiz fonksiyona istediğimiz kadar veri girişi yapıp toplama çıkarma ve çarpma yapabiliyoruz. (bölmeyi bilerek eklemedim saçma olmasından dolayı).Eval kullanmadan hemen hemen bu kadar kod satırı ile işlemlerimizi gerçekleştirebiliyoruz peki neden
bu kadar kısa kod satırı ile işimizi halletmiyoruz ?
İngilizce de evaluate kelimesinden dönüşmüştür işleme sokmak çalıştırmak anlamına gelir yani kısaca bu fonksiyonun görevi karnına gelen değerleri çalıştırmak ve işlemektir yukarıda gördüğümüzde gayet masumhane şekilde çalışmaktadır.Peki biz bu eval fonksiyonu ile yazdığımızı düşündüğümüz hesap makinesine
komutunu gönderirsek ne olur ? Şuanda oturumunu açtığımız kullanıcı adımızı bize söylemektedir.Biz bu programı hesap makinesi yapmak için yazmıştık oysa ki artık program amacından saptı ve farklı şekilde çalıştırabiliyor.Bir web sunucumuz üzerinde arka plan işlemi yaptırdığımızı düşünelim bu fonksiyonu biz ne kadar iyi niyetle yazsak da bu şekilde istismar edilebilir sunucuda dosya açılabilir silinebilir/okunabilir/yazılabilir o saatten sonra her şey saldıran kişinin hayal gücüne kalmıştır.
Ee ben peki bu güzelim fonksiyonu kullanamayacak mıyım?Tabi ki kullanacaksanız ancak gerekli filtreleme işlemleri yaptıktan sonra. Örneğin sayıların bulunduğu bir karakter dizisi tanımlayıp tek tek eşleştirip bunlarla uyuşmayan bi karakter dizisi geldiğinde programı direkt olarak sonlandırabilirsiniz
Kod:
class arvix_hesapmakinesi():
def toplama(self,*args):
toplam =0
for i in args:
toplam+=i
return toplam
def carpma(self,*args):
carpim=1
for i in args:
carpim *=i
return carpim
def bolme(self,a,b):
return a/b
def cikarma(self,*args):
toplam =0
for i in args:
toplam+=i
return toplam-2*toplam
a = arvix_hesapmakinesi().cikarma(4,5,6)
print(a)
bu kadar kısa kod satırı ile işimizi halletmiyoruz ?
İngilizce de evaluate kelimesinden dönüşmüştür işleme sokmak çalıştırmak anlamına gelir yani kısaca bu fonksiyonun görevi karnına gelen değerleri çalıştırmak ve işlemektir yukarıda gördüğümüzde gayet masumhane şekilde çalışmaktadır.Peki biz bu eval fonksiyonu ile yazdığımızı düşündüğümüz hesap makinesine
Kod:
__import__("os").getlogin()
Ee ben peki bu güzelim fonksiyonu kullanamayacak mıyım?Tabi ki kullanacaksanız ancak gerekli filtreleme işlemleri yaptıktan sonra. Örneğin sayıların bulunduğu bir karakter dizisi tanımlayıp tek tek eşleştirip bunlarla uyuşmayan bi karakter dizisi geldiğinde programı direkt olarak sonlandırabilirsiniz
Son düzenleme: