vykdyti () Funkcija naudojama dinamiškai vykdyti Python programas, kurios gali būti eilutės arba objekto kodas. Jei tai yra eilutė, eilutė išanalizuojama kaip Python teiginių rinkinys, kuris vėliau vykdomas, nebent įvyktų sintaksės klaida, o jei tai yra objekto kodas, ji tiesiog vykdoma. Turime būti atsargūs, kad grąžinimo teiginiai nebūtų naudojami už funkcijų apibrėžimų ribų, net ir kodo, perduodamo funkcijai exec () kontekste. Jis negrąžina jokios vertės, todėl grąžina Nė vienas .
Python exec() sintaksė
exec(objektas[, globaliai[, vietiniai]])
Parametrai:
- objektas: Kaip jau minėta, tai gali būti eilutės arba objekto kodas
- globaliai: Tai gali būti žodynas, o parametras yra neprivalomas
- vietiniai: Tai gali būti atvaizdavimo objektas ir taip pat neprivalomas
Kaip exec () veikia Python?
Šiame pavyzdyje galime matyti dinaminį Python vykdymą naudojantexec()>
funkcija. Tai demonstruoja galimybę dinamiškai vykdyti objekte esantį kodą, parodydama Python dinaminio vykdymo koncepciją.
Python3
prog> => 'print('The sum of 5 and 10 is', (5+10))'> exec> (prog)> |
>
>Išvestis
"kruskal algoritmas"
The sum of 5 and 10 is 15>
Įspėjimas arba apribojimai
Prieš naudojant bet kokius metodus funkcijoje exec() reikia turėti omenyje, ką palaiko visos funkcijos exec(). Norėdami tai pamatyti, galime naudoti dir() funkciją.
Šiame pavyzdyje dinaminį vykdymą Python galime matyti kaipdir()>
funkcija vykdoma vidujeexec()>
funkcija, iliustruojanti Python dinaminio vykdymo sampratą.
Python3
# The math class is used to include all the> # math functions> from> math> import> *> exec> (> 'print(dir())'> )> |
>
>Išvestis
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']>
Globalūs ir vietiniai parametrai
„Python“ leidžia apriboti įvairių kintamųjų ir metodų naudojimą, naudojant globalius ir vietinius parametrus, kurių galbūt nereikia. Šie vietiniai ir pasauliniai parametrai naudojami vietiniams arba visuotiniams kintamiesiems, daugiausia žodynams. Visuotinis parametras aplenkia, jei trūksta vietinio, o tai reiškia, kad visuotinis gali būti naudojamas abiem laukams. Pažiūrėkime, kaip veikia kodas, perduodamas tik visuotinį parametrą.
Python3
# Here we have passed an empty dictionary> from> math> import> *> exec> (> 'print(dir())'> , {})> |
c# datetime
>
>Išvestis
['__builtins__']>
Taigi matome, kad perduodant tuščią žodyną kaip visuotinį parametrą, rodomas tik __builtins__ ir nerodomos jokios kitos matematinės funkcijos, kaip ankstesniame pavyzdyje. Tai reiškia, kad objekto parametrui bus palaikomi tik __builtins__. Tai rodo, kad visos kitos objekto funkcijos yra apribotos. Norėdami tai įrodyti, pabandykime dirbti su matematine funkcija ir pažiūrėkime, kas atsitiks.
Python3
# An exception will be raised> from> math> import> *> exec> (> 'print(factorial(5))'> , {})> |
>
>
Šiame pavyzdyje kaip išvestis turėjo būti išspausdinta 120, bet vietoj to rodoma, kad nėra išvesties ir pateikiama išimtis. Nors importavome matematikos modulį, faktorial() metodas neveikė dėl apribojimų, kuriuos nustatėme perduodant visuotinį parametrą.
Taip pat galime leisti vykdyti keletą iš daugelio funkcijų. Tarkime, kad norime, kad visi kiti matematikos moduliai būtų apriboti, išskyrus faktorial() funkciją.
Python3
haraldas baldras
# factorial() will be executed> from> math> import> *> exec> (> 'print(factorial(5))'> , {> 'factorial'> :factorial})> |
>
>Išvestis
120>
Taip pat galime pakeisti šių iš anksto nustatytų metodų pavadinimus ir vykdymo metu suteikti jiems vartotojo apibrėžtą pavadinimą. Funkcijos pavadinimą galime pakeisti iš faktorialus () į faktas() , kurį nustato vartotojas.
Python3
# factorial() renamed as fact> from> math> import> *> exec> (> 'print(fact(5))'> , {> 'fact'> : factorial})> |
>
>Išvestis
120>
Pagal šį scenarijų, perduodami globalius ir vietinius parametrus, vykdomo kodo elgseną galime pritaikyti pagal savo specifinius reikalavimus, parodydami dinaminio vykdymo „Python“ universalumą.
užpildas css
Python3
from> math> import> *> exec> (> 'print(dir())'> , {> 'built'> : __builtins__}, {> 'sum'> :> sum> ,> 'iter'> :> iter> })> |
python // operatorius
>
>Išvestis
['iter', 'sum']>
Dinaminis vykdymas Python leidžia vykdyti konkrečius metodus, pvzsum()>
iriter()>
kartu su viduje esančiais metodaisexec()>
funkcija, parodanti dinaminio Python vykdymo lankstumą. Tai leidžia tik sumos ir iterijos metodai kartu su visais integruotais metodais exec () funkcijoje. Taip pat galime apriboti __builtins__ naudojimą taip:
Python3
#__builtins__ has been restricted using None> from> math> import> *> exec> (> 'print(dir())'> , {> '__builtins__'> :> None> }, {> 'sum'> :> sum> ,> 'print'> :> print> ,> 'dir'> :> dir> })> |
>
>Išvestis
['dir', 'print', 'sum']>