Python'da Eval Hakkında Bilmeniz Gereken Her Şey

Bu makale size Python'da Eval hakkında ayrıntılı ve kapsamlı bilgi sağlayacaktır, Bunun dezavantajları ve örneklerle kullanımları.

Etrafınıza baktığınız her yerde, ihtiyaçlarınızı karşılamak için özel olarak tasarlanmış bir uygulama bulacaksınız. Bu uygulamaları geliştirmek için kullanılabilecek birçok programlama dili olmasına rağmen, çoğu . Python, harika özellikleri ve artırılmış çok yönlülüğü ile birlikte, her zaman hem güçlü hem de son derece kullanışlı olan benzersiz teklifleri masaya getiriyor. Bu Eval in Python makalesinde aşağıdaki noktaları tartışacağız:



Python'da Değerlendir nedir?

Python'daki eval işlevi, buradaki en ilginç seçeneklerden biridir. Bazıları buna hack, bazıları kısayol diyor, ancak her iki şekilde de bir Python programını bir Python kodu içinde çalıştırmak için kullanabilirsiniz. Oldukça havalı değil mi?



Eval işlevini kullandığınızda, temel olarak yorumlayıcıyı eval işlevinin parantezi içinde yer alan çalıştırmaya teşvik edersiniz.

PythonLogo- PythonPython'da eval işlevini kullanmak için sözdizimi şöyledir:



eval (ifade, globals = Yok, yereller = Yok)

Java'da nasıl çıkılır

Yukarıdaki sözdiziminde,

  1. İfade: Python programının kendi içinde bir Python ifadesi olarak ayrıştırılan ve değerlendirilen kod dizisi veya parçasıdır.



  2. Global: Yukarıda bahsedilen ifadeyi yürütmek için mevcut tüm global yöntemleri tanımlamak için kullanılan sözlüktür. Bu isteğe bağlı bir varlıktır ve kullanımları ihtiyacınıza bağlıdır.

  3. Yerliler: Globals'a benzer şekilde, bu, mevcut yerel yöntemleri ve değişkenleri belirtmek için kullanılan başka bir sözlüktür.

Bu işlevin kullanımını daha iyi anlamak için aşağıdaki örneğe bakın.

matematik içe aktarma * def gizli_işlev (): return 'Gizli anahtar 1234' def function_creator (): Değerlendirilecek # ifade expr = raw_input ('Fonksiyonu girin (x cinsinden):') # ifadede kullanılan değişken x = int (raw_input ('x'in değerini girin:')) # değerlendirme ifadesi y = eval (ifade) # yazdırma değerlendirilen sonuç print ('y = {}'. format (y)) __name__ == '__main__' ise: function_creator ()

Yukarıdaki örnekte, function_creator, program çalıştırıldığında kullanıcı tarafından oluşturulan matematiksel ifadeleri değerlendirecek bir işlevdir.

Çıktı:

İşlevi girin (x cinsinden): x * (x + 1) * (x + 2)

X: 3 değerini girin

y = 60

Analiz

Artık yukarıda paylaşılan kodu görüntülediğinize göre, biraz daha analiz edelim.

  1. Yukarıdaki işlev, x ifadesindeki herhangi bir değişkeni girdi olarak alacaktır.

  2. Çalıştırıldıktan sonra, kullanıcıdan x için bir değer girmesi istenecek, ancak bundan sonra program üretilecektir.

  3. Son olarak, Python programı, eval işleviniifadebir argüman olarak.

Değerlendirmenin Dezavantajları

Python'un diğer yerleşik işlevlerine benzer şekilde, eval da hesaba katılmazsa sorun yaratabilecek birkaç dezavantajla birlikte gelir.

Yukarıdaki örneğe bakarsanız, işlevin ana güvenlik açıklarından biri olan function_creator, program içindeki herhangi bir gizli değeri açığa çıkarabilmesi ve ayrıca zararlı bir işlevi çağırmasıdır, çünkü eval varsayılan olarak parantez içinde yatan her şeyi çalıştıracaktır.

Bunu daha iyi anlamak için aşağıdaki örneğe bir göz atın.

Kullanıcıdan Giriş

İşlevi girin (x cinsinden): gizli_işlev ()

X değerini girin: 0

Çıktı:

y = Gizli anahtar 1234

Eval işlevinin kullanılmasıyla birlikte gelen bir diğer tehlikeli durum, os modülünü içe aktarmaktır. İşletim sistemi modülünü içe aktardığınızda, Python'un kullanıcının kimlik doğrulaması olmadan yerel sisteminizde bulunan dosyaları okumasına ve yazmasına izin verir. Böyle bir durumda, tek bir yanlış yazarsanızkod satırına bakarsanız, tüm yerel dosyalarınız silinebilir.

Tüm bu dezavantajların çözümü, eval işlevinin yeteneklerini kısıtlamaktır.

Python'da Değerlendirmeyi Güvenli Hale Getirme

Eval, varsayılan olarak erişimi olan veya önceden tanımlanmış herhangi bir işlevi ayrıştırma seçeneğiyle birlikte gelir. Kodunuzu yazarken bunu aklınızda tutmak, eval yeteneğini önemli ölçüde sınırlar ve hiçbir şeyin ters gitmemesini sağlar.

Bu kavramı daha iyi anlamak için aşağıdaki örneğe bir göz atın.

matematik içe aktarma * def gizli_işlev (): return 'Gizli anahtar 1234' def function_creator (): Değerlendirilecek # ifade expr = raw_input ('Fonksiyonu girin (x cinsinden):') # ifadede kullanılan değişken x = int (raw_input ('x'in değerini girin:')) # güvenli sözlükte x değişkenini geçirme safe_dict ['x'] = x # ifadeyi değerlendirme y = eval (ifade, {'__builtins __': Yok}, safe_dict) # yazdırma değerlendirilen sonuç yazdırma ('y = {}'. format (y)) eğer __name__ == '__main__': # güvenli yöntemler listesi safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' degree ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radyan', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # güvenli yöntemler sözlüğü oluşturma safe_dict = dict ([(k, locals (). get (k, None)) for k for safe_list]) function_creator ()

Kullanıcıdan Giriş

İşlevi girin (x cinsinden): gizli_işlev ()

X değerini girin: 0

Çıktı:

NameError: 'gizli_işlev' adı tanımlanmadı

Eval erişimini sınırlayarak görebileceğiniz gibi, zararlı olduğu kanıtlanabilecek yanlış bir çıktı olasılığı yok sayılmıştır.

Eval Kullanımları

Yukarıdaki bölümlerde açıklandığı gibi, birkaç güvenlik nedeni nedeniyle eval çok yaygın olarak kullanılmamaktadır. Ancak yine de eval kullanmanın yararlı olduğu belirli kullanım durumları vardır. Bunlardan en önemlileri bazıları.

  1. Kullanıcının programın çıktısını değiştirmek için kendi betiklerini girmesini istiyorsanız, eval işlevini kullanmak faydalı olacaktır.

  2. Matematiksel sorguları çözmek için ifadeler yazarken, bir ifade çözümleyici yazmaktan çok daha kolay olduğu için eval'dan yararlanabilirsiniz.

Artık eval hakkında her şeyi bildiğinize göre, avantajları ve dezavantajları göz önünde bulundurarak günlük programlamada aynısını kullanacağınızı umuyoruz.

Bununla birlikte, bu Eval in Python makalesinin sonuna geldik. Python ve çeşitli uygulamaları hakkında derinlemesine bilgi edinmek için şunları yapabilirsiniz: 7/24 destek ve ömür boyu erişim ile canlı çevrimiçi eğitim için.

Bizim için bir sorunuz mu var? 'Eval in Python' un yorumlar bölümünde bunlardan bahsedin, size geri döneceğiz.