Allt du behöver veta om Eval i Python

Den här artikeln ger dig en detaljerad och omfattande kunskap om Eval i Python, det är nackdelar och använder med exempel.

Överallt där du tittar omkring dig hittar du en applikation som har byggts specifikt för att uppfylla dina behov. Även om det finns många programmeringsspråk som kan användas för att utveckla dessa applikationer är de flesta byggda med . Python tillsammans med sina fantastiska funktioner och ökad mångsidighet ger unika erbjudanden som är både kraftfulla och mycket användbara hela tiden. I denna Eval in Python-artikel kommer vi att diskutera följande punkter:

Vad är Eval i Python?

Eval-funktionen i Python är ett av de mest intressanta alternativen där ute. Vissa kallar det ett hack och andra kallar det en genväg, men på något sätt kan du använda det för att köra ett Python-program inom en Python-kod. Ganska cool, eller hur?





När du använder eval-funktionen uppmanar du i princip tolken att köra som är innesluten inom eval-funktionens fäste.

PythonLogo- Eval i PythonSyntaxen för att använda eval-funktionen i Python är:



eval (expression, globals = None, locals = None)

I ovanstående syntax,

  1. Uttryck: Det är strängen eller koden som analyseras och utvärderas som ett Python-uttryck i själva Python-programmet.



  2. Global: Det är ordboken som används för att definiera alla tillgängliga globala metoder för att utföra det ovan nämnda uttrycket. Detta är en valfri enhet och dess användning beror på ditt behov.

  3. Lokalbefolkningen: I likhet med globaler är detta en annan ordlista som används för att specificera tillgängliga lokala metoder samt variabler.

För att förstå användningen av denna funktion bättre, ta en titt på exemplet nedan.

stl sortera c ++
från matematisk import * def secret_function (): return 'Secret key is 1234' def function_creator (): # expression to be evaluated expr = raw_input ('Ange funktionen (i termer av x):') # variabel som används i uttryck x = int (raw_input ('Ange värdet på x:')) # utvärderingsuttryck y = eval (expr) # utskrift utvärderat resultatutskrift ('y = {}'. format (y)) om __name__ == '__main__': function_creator ()

I exemplet ovan är function_creator en funktion som utvärderar de matematiska uttryck som skapats av användaren när programmet körs.

Produktion:

Ange funktionen (i termer av x): x * (x + 1) * (x + 2)

Ange värdet på x: 3

y = 60

Analys

Nu när du har sett koden som delas ovan, låt oss analysera den lite längre.

  1. Ovanstående funktion tar vilken variabel som helst i uttrycket x som inmatning.

  2. När den har körts uppmanas användaren att mata in ett värde för x, varefter resultatet kommer att genereras för programmet.

  3. Slutligen kommer Python-programmet att utföra eval-funktionen genom att analyseraexprsom ett argument.

Nackdelar med Eval

I likhet med andra inbyggda funktioner i Python kommer eval också med några nackdelar som kan skapa ett problem om det inte redovisas.

Om du tittar på exemplet ovan, en av de viktigaste sårbarheterna i funktionen, function_creator är att den kan exponera alla dolda värden i programmet och också anropa en skadlig funktion som eval som standard kommer att utföra allt som ligger inom dess parentes.

För att förstå detta ytterligare, ta en titt på exemplet nedan.

Ingång från användare

Ange funktionen (i termer av x): secret_function ()

Ange värdet på x: 0

Produktion:

y = Hemlig nyckel är 1234

En annan farlig situation som följer med att använda eval-funktionen är att importera os-modulen. När du har importerat os-modulen tillåter Python att läsa och skriva alla filer som finns på ditt eget system utan autentisering från användaren. I ett sådant fall om du skriver felkodrad kan alla dina inbyggda filer raderas.

Lösningen på alla dessa nackdelar ligger i att begränsa eval-funktionens kapacitet.

Gör Eval Safe i Python

Eval kommer som standard med möjligheten att analysera en funktion som den har tillgång till eller någon som redan har definierats. Att tänka på detta när du skriver din kod kommer att begränsa evalens möjligheter i avsevärd utsträckning och därigenom se till att du inte får något fel.

För att förstå detta koncept ytterligare, ta en titt på exemplet nedan.

från matematisk import * def secret_function (): return 'Secret key is 1234' def function_creator (): # expression to be evaluated expr = raw_input ('Ange funktionen (i termer av x):') # variabel som används i uttryck x = int (raw_input ('Ange värdet på x:')) # passerar variabel x i säker ordbok safe_dict ['x'] = x # utvärderingsuttryck y = eval (expr, {'__builtins __': Ingen}, safe_dict) # utskrift utvärderat resultatutskrift ('y = {}'. format (y)) om __name__ == '__main__': # lista över säkra metoder safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' grader ',' e ',' exp ',' fabs ',' golv ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # skapar en ordbok med säkra metoder safe_dict = dict ([(k, lokalbefolkningen (). get (k, None)) för k i safe_list]) function_creator ()

Ingång från användare

Ange funktionen (i termer av x): secret_function ()

Ange värdet på x: 0

förlänger och implementerar tillsammans i java

Produktion:

NameError: namnet 'secret_function' är inte definierat

Som du kan se genom att begränsa tillgången till eval har riskerna för en felaktig produktion som kan visa sig vara skadliga förnekats.

Användning av Eval

Som förklarats i ovanstående avsnitt används eval på grund av flera säkerhetsskäl inte så vanligt. Men ändå finns det speciella användningsfall där användning av eval visar sig vara till hjälp. Några av de viktigaste av dessa är.

  1. Om du vill att användaren ska ange sina egna skript för att ändra utdata från programmet, kommer det att vara till hjälp att använda eval-funktionen.

  2. När du skriver uttryck för att lösa matematiska frågor kan du använda eval eftersom det är mycket lättare än att skriva en uttrycksparser.

Nu när du vet allt om eval, hoppas vi att du kommer att använda detsamma i din dagliga programmering med tanke på fördelarna och nackdelarna.

Med detta kommer vi till ett slut på denna Eval in Python-artikel. För att få fördjupad kunskap om Python tillsammans med dess olika applikationer kan du för live onlineträning med support dygnet runt och livstidsåtkomst.

Har du en fråga till oss? Nämn dem i kommentarsektionen i ”Eval in Python” så återkommer vi till dig.