Kõik, mida peate Pythonis Evali kohta teadma



See artikkel annab teile üksikasjalikud ja põhjalikud teadmised Evali Pythonis. See on puudusi ja näiteid.

Kõikjal, kus ringi vaatate, leiate rakenduse, mis on spetsiaalselt loodud teie vajaduste täitmiseks. Ehkki nende rakenduste arendamiseks saab kasutada palju programmeerimiskeeli, on enamik neist ehitatud . Python koos oma suurepäraste omaduste ja suurenenud mitmekülgsusega toob lauale ainulaadsed pakkumised, mis on nii võimsad kui ka ülimalt kasulikud igal ajal. Selles Pythoni Evali artiklis käsitleme järgmisi punkte:

Mis on Eval Pythonis?

Eval funktsioon Pythonis on üks huvitavamaid võimalusi seal. Mõni nimetab seda häkkimiseks ja mõni otseteeks, kuid mõlemal viisil saate seda kasutada, et Pythoni koodi käivitamiseks Pythoni programmi käivitada. Päris lahe eks?





Funktsiooni eval kasutamisel kutsute tõlki põhimõtteliselt üles käivitama funktsioon, mis on suletud evali funktsiooni sulgudesse.

PythonLogo- Hinda PythonisFunktsiooni eval kasutamise süntaks Pythonis on:



string kuupäevaks teisendamiseks javas

eval (avaldis, globaalid = puudub, kohalikud = pole)

Ülaltoodud süntaksis

  1. Väljend: See on string või koodijupp, mida sõelutakse ja hinnatakse Pythoni avaldisena Pythoni programmis endas.



  2. Globaalne: Sõnastikku kasutatakse kõigi ülaltoodud avaldise käivitamiseks saadaolevate üldiste meetodite määratlemiseks. See on valikuline üksus ja selle kasutus sõltub teie vajadusest.

  3. Kohalikud: Sarnaselt globaalidele on see veel üks sõnastik, mida kasutatakse nii kohalike meetodite kui ka muutujate määramiseks.

Selle funktsiooni kasutamise paremaks mõistmiseks vaadake allolevat näidet.

matemaatika impordist * def secret_function (): return 'Salajane võti on 1234' def function_creator (): # hinnatav avaldis expr = raw_input ('Sisestage funktsioon (x-ga):') # avaldises x = kasutatud muutuja int (raw_input ('Sisestage x väärtus:')) # avaldise hindamine y = eval (expr) # hinnatud tulemuse printimine ('y = {}'. formaat (y)) kui __name__ == '__main__': function_creator ()

Ülaltoodud näites on function_creator funktsioon, mis hindab kasutaja käivitamisel loodud matemaatilisi avaldisi.

Väljund:

Sisestage funktsioon (x-ga): x * (x + 1) * (x + 2)

Sisestage x väärtus: 3

y = 60

Analüüs

Nüüd, kui olete ülaltoodud jagatud koodi vaadanud, analüüsime seda veidi edasi.

java mida teeb lisa
  1. Ülaltoodud funktsioon võtab sisendiks mis tahes muutuja avaldises x.

  2. Kui see on täidetud, palutakse kasutajal sisestada väärtus x, alles pärast seda luuakse programm.

  3. Lõpuks käivitab Python programm eval-funktsiooni parsidesväljendargumendina.

Evali puudused

Sarnaselt teistele Pythoni sisseehitatud funktsioonidele on ka Evalil mõned puudused, mis võivad probleemi tekitada, kui seda ei arvestata.

Kui vaatate ülaltoodud näidet, on funktsiooni function_creator üks peamisi haavatavusi see, et see võib paljastada kõik programmi varjatud väärtused ja kutsuda ka kahjulikku funktsiooni, kuna vaikimisi täidab eval kõik, mis asub selle sulgudes.

Selle edasiseks mõistmiseks vaadake allolevat näidet.

Kasutaja sisend

Sisestage funktsioon (x-ga): secret_function ()

Sisestage x: 0 väärtus

Väljund:

y = salajane võti on 1234

Teine ohtlik olukord, mis eval-funktsiooni kasutamisega kaasneb, on os-mooduli importimine. Kui olete os-mooduli importinud, võimaldab see Pythonil lugeda ja kirjutada kõiki natiivsüsteemis olevaid faile ilma kasutaja autentimiseta. Sellisel juhul, kui kirjutate valesti ühekoodirida, võidakse kõik teie kohalikud failid kustutada.

Kõigi nende puuduste lahendus seisneb eval-funktsiooni võimaluste piiramises.

Evali Pythonis turvalisemaks muutmine

Vaikimisi on Eval koos võimalusega parsida kõiki funktsioone, millele tal on juurdepääs, või mis tahes on juba määratletud. Seda oma koodi kirjutamise ajal meeles pidades piirate evali võimalusi märkimisväärselt, veendudes sellega, et midagi valesti ei läheks.

Selle kontseptsiooni edasiseks mõistmiseks vaadake allpool toodud näidet.

matemaatika impordist * def secret_function (): return 'Salajane võti on 1234' def function_creator (): # hinnatav avaldis expr = raw_input ('Sisestage funktsioon (x-ga):') # avaldises x = kasutatud muutuja int (raw_input ('Sisestage x väärtus:')) # muutuja x edastamine turvalises sõnaraamatus safe_dict ['x'] = x # avaldise y = eval hindamine (expr, {'__builtins __': Puudub}, safe_dict) # printimine hinnatud tulemuse printimine ('y = {}'. formaat (y)) kui __nimi__ == '__main__': # ohutute meetodite loetelu safe_list = ['acos', 'asin', 'atan', 'atan2', 'ce ',' cos ',' cosh ',' kraadi ',' e ',' exp ',' fabs ',' põrand ',' fmod ',' frexp ',' hüpot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radiaanid', 'patt', 'sinh', 'sqrt', 'tan', 'tanh'] # ohutute meetodite sõnastiku loomine safe_dict = dict ([[(k, kohalikud (). get (k, Puudub)] k jaoks Safe_listis]) function_creator ()

Kasutaja sisend

Sisestage funktsioon (x-ga): secret_function ()

Sisestage x: 0 väärtus

Väljund:

NameError: nimi 'secret_function' pole määratletud

Nagu näete evali juurdepääsu piiramise kaudu, on vale väljundi võimalus, mis võib osutuda kahjulikuks, eitatud.

Evali kasutusalad

Nagu ülaltoodud jaotistes on selgitatud, ei kasutata evali mitmete turvalisuse põhjuste tõttu nii sageli. Kuid siiski on erilisi kasutusjuhtumeid, kus evali kasutamine osutub kasulikuks. Mõned neist on kõige olulisemad.

  1. Kui soovite, et kasutaja sisestaks oma skriptid programmi väljundi muutmiseks, on funktsiooni eval kasutamine kasulik.

    c ++ sorteerimismassiiv
  2. Matemaatiliste päringute lahendamiseks avaldiste kirjutamise ajal saate kasutada evali, kuna see on palju lihtsam kui avaldiste parseri kirjutamine.

Nüüd, kui teate kõike evali kohta, loodame, et kasutate seda oma igapäevases programmeerimises, pidades silmas nii eeliseid kui ka puudusi.

Sellega oleme Pythoni artiklis selle Evali lõppenud. Põhjalike teadmiste saamiseks Pythoni kohta koos selle erinevate rakendustega saate seda teha reaalajas veebikoolituse jaoks, millel on 24-tunnine tugi ja juurdepääs kogu elule.

Kas teil on meile küsimus? Mainige neid jaotise „Eval Pythonis” kommentaaride osas ja me võtame teiega ühendust.