Alles wat u moet weten over Eval in Python



Dit artikel biedt u een gedetailleerde en uitgebreide kennis van Eval in Python, zijn nadelen en toepassingen met voorbeelden.

Overal waar u om u heen kijkt, vindt u een applicatie die speciaal is gebouwd om aan uw behoeften te voldoen. Hoewel er veel programmeertalen zijn die kunnen worden gebruikt om deze applicaties te ontwikkelen, zijn de meeste ervan gebouwd met . Python biedt samen met zijn geweldige functies en grotere veelzijdigheid een uniek aanbod dat te allen tijde zowel krachtig als uiterst nuttig is. In dit Eval in Python-artikel zullen we de volgende punten bespreken:

Wat is Eval in Python?

De eval-functie in Python is een van de meest interessante opties die er zijn. Sommigen noemen het een hack en sommigen noemen het een snelkoppeling, maar hoe dan ook, je kunt er gebruik van maken om een ​​Python-programma binnen een Python-code uit te voeren. Best cool toch?





Wanneer u de eval-functie gebruikt, dringt u er in feite bij de tolk op aan om te starten die is ingesloten in de beugel van de eval-functie.

PythonLogo-Eval in PythonDe syntaxis voor het gebruik van de eval-functie in Python is:



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

In de bovenstaande syntaxis,

  1. Uitdrukking: Het is de string of het stuk code dat wordt geparseerd en geëvalueerd als een Python-expressie binnen het Python-programma zelf.



  2. Globaal: Het is het woordenboek dat wordt gebruikt om alle globale methoden te definiëren die beschikbaar zijn om de hierboven genoemde uitdrukking uit te voeren. Dit is een optionele entiteit en het gebruik ervan hangt af van uw behoefte.

  3. Lokale bevolking: Net als bij globals, is dit een ander woordenboek dat wordt gebruikt om de beschikbare lokale methoden en variabelen te specificeren.

Bekijk het onderstaande voorbeeld om het gebruik van deze functie beter te begrijpen.

uit wiskundeimport * def secret_function (): return 'Geheime sleutel is 1234' def function_creator (): # uitdrukking die moet worden geëvalueerd expr = raw_input ('Voer de functie (in termen van x):') # variabele gebruikt in uitdrukking x = int (raw_input ('Voer de waarde van x:')) # evaluatie-expressie y = eval (expr) # printing geëvalueerd resultaat print ('y = {}'. format (y)) if __name__ == '__main__': function_creator ()

In het bovenstaande voorbeeld is function_creator een functie die de wiskundige uitdrukkingen evalueert die door de gebruiker zijn gemaakt wanneer het programma wordt uitgevoerd.

Uitgang:

Voer de functie in (in termen van x): x * (x + 1) * (x + 2)

methode overbelasting en overschrijven in java

Voer de waarde van x in: 3

y = 60

Analyse

Nu u de hierboven gedeelde code heeft bekeken, laten we deze wat verder analyseren.

  1. De bovenstaande functie neemt elke variabele in de uitdrukking x als invoer.

  2. Eenmaal uitgevoerd, wordt de gebruiker gevraagd om een ​​waarde voor x in te voeren, waarna het resultaat voor het programma wordt gegenereerd.

  3. Ten slotte zal het Python-programma de eval-functie uitvoeren door hetexprals argument.

Nadelen van Eval

Net als bij andere ingebouwde functies van Python, heeft eval ook enkele nadelen die een probleem kunnen veroorzaken als er geen rekening mee wordt gehouden.

hoe lengte van array javascript te krijgen

Als je naar het bovenstaande voorbeeld kijkt, is een van de belangrijkste kwetsbaarheden van de functie, function_creator, dat het alle verborgen waarden binnen het programma kan blootleggen en ook een schadelijke functie kan aanroepen, aangezien eval standaard alles zal uitvoeren dat tussen de haakjes staat.

Bekijk het onderstaande voorbeeld om dit verder te begrijpen.

Input van de gebruiker

Voer de functie in (in termen van x): secret_function ()

Voer de waarde van x: 0 in

Uitgang:

y = Geheime sleutel is 1234

Een andere gevaarlijke situatie die gepaard gaat met het gebruik van de eval-functie, is het importeren van de os-module. Als je de os-module hebt geïmporteerd, kan Python alle bestanden op je native systeem lezen en schrijven zonder authenticatie van de gebruiker. Als u in dat geval een enkeleregel code, kunnen al uw oorspronkelijke bestanden worden verwijderd.

De oplossing voor al deze nadelen ligt in het beperken van de mogelijkheden van de evaluatiefunctie.

Eval veilig maken in Python

Eval wordt standaard geleverd met de optie om elke functie waartoe het toegang heeft of die al is gedefinieerd, te parseren. Als u dit in gedachten houdt tijdens het schrijven van uw code, worden de mogelijkheden van evaluatie aanzienlijk beperkt en zorgt u ervoor dat er niets misgaat.

Bekijk het onderstaande voorbeeld om dit concept verder te begrijpen.

uit wiskundeimport * def secret_function (): return 'Geheime sleutel is 1234' def function_creator (): # uitdrukking die moet worden geëvalueerd expr = raw_input ('Voer de functie (in termen van x):') # variabele gebruikt in uitdrukking x = int (raw_input ('Voer de waarde van x:')) # variabele x doorgeven in veilig woordenboek safe_dict ['x'] = x # expressie evalueren y = eval (expr, {'__builtins __': None}, safe_dict) # printing geëvalueerd resultaat print ('y = {}'. format (y)) if __name__ == '__main__': # lijst met veilige methoden safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' graden ',' e ',' exp ',' fabs ',' vloer ',' fmod ',' frexp ',' hypot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radialen', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # een woordenboek maken met veilige methoden safe_dict = dict ([(k, locals (). get (k, None)) voor k in safe_list]) function_creator ()

Input van de gebruiker

Voer de functie in (in termen van x): secret_function ()

Voer de waarde van x: 0 in

heeft een relatie in java

Uitgang:

NameError: naam 'secret_function' is niet gedefinieerd

Zoals u kunt zien door de toegang tot eval te beperken, is de kans op een verkeerde output die schadelijk kan blijken te zijn, teniet gedaan.

Maakt gebruik van Eval

Zoals uitgelegd in de bovenstaande secties, wordt eval om verschillende veiligheidsredenen niet zo vaak gebruikt. Maar toch zijn er bepaalde use-cases waarbij het gebruik van eval nuttig blijkt te zijn. Enkele van de belangrijkste hiervan zijn.

  1. Als u wilt dat de gebruiker zijn eigen scriptlets invoert om de uitvoer van het programma te wijzigen, zal het nuttig blijken om de eval-functie te gebruiken.

  2. Bij het schrijven van uitdrukkingen om wiskundige vragen op te lossen, kunt u gebruik maken van eval, aangezien dit veel gemakkelijker is dan het schrijven van een uitdrukkingsparser.

Nu u alles van eval weet, hopen we dat u hiervan gebruik zult maken in uw dagelijkse programmering, rekening houdend met de voor- en nadelen.

Hiermee komen we aan het einde van dit Eval in Python-artikel. Om diepgaande kennis over Python en de verschillende toepassingen te krijgen, kunt u dat voor live online training met 24/7 ondersteuning en levenslange toegang.

Heeft u een vraag voor ons? Noem ze in het commentaargedeelte van 'Eval in Python' en we nemen zo snel mogelijk contact met je op.