exec() funktion används för dynamisk körning av Python-program som antingen kan vara en sträng eller objektkod. Om det är en sträng tolkas strängen som en svit av Python-satser som sedan exekveras om inte ett syntaxfel uppstår och om det är en objektkod exekveras den helt enkelt. Vi måste vara försiktiga med att return-satserna inte får användas utanför funktionsdefinitioner, inte ens inom ramen för kod som skickas till exec()-funktionen. Det returnerar inget värde, därför returnerar det Ingen .
Python exec() Syntax
exec(objekt[, globals[, lokalbefolkningen]])
Parametrar:
- objekt: Som redan sagt kan detta vara en sträng eller objektkod
- globala: Detta kan vara en ordbok och parametern är valfri
- lokalbefolkningen: Detta kan vara ett mappningsobjekt och är också valfritt
Hur fungerar exec() i Python?
I det här exemplet kan vi se dynamisk körning i Python med hjälp avexec()>
fungera. Det visar förmågan att köra kod som finns i ett objekt dynamiskt, och visar upp konceptet med dynamisk exekvering i Python.
Python3
dfs vs bfs
prog> => 'print('The sum of 5 and 10 is', (5+10))'> exec> (prog)> |
>
>Produktion
The sum of 5 and 10 is 15>
Varning eller begränsningar
Innan du använder några metoder i exec()-funktionen måste man tänka på vad alla funktioner exec() stöder. För att se detta kan vi använda dir()-funktionen.
I det här exemplet kan vi se dynamisk exekvering i Python somdir()>
funktionen exekveras inomexec()>
funktion, som illustrerar konceptet med dynamisk exekvering i Python.
Python3
# The math class is used to include all the> # math functions> from> math> import> *> exec> (> 'print(dir())'> )> |
>
>Produktion
['__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']>
Globala och lokala parametrar
Python tillåter oss att begränsa användningen av olika variabler och metoder genom att använda globala och lokala parametrar, vilket kanske inte behövs. Dessa lokala och globala parametrar används för lokala eller globala variabler, främst ordböcker. Den globala parametern går om om den lokala saknas vilket innebär att global kan användas för båda fälten. Låt oss se hur koden fungerar genom att bara skicka den globala parametern.
Python3
# Here we have passed an empty dictionary> from> math> import> *> exec> (> 'print(dir())'> , {})> |
räkna distinkta sql
>
>Produktion
['__builtins__']>
Så vi ser att när en tom ordbok skickas som en global parameter, visas bara __builtins__ och inga andra matematiska funktioner visas som i föregående exempel. Detta innebär att endast __builtins__ kommer att stödjas för objektparametern. Detta tyder på att alla andra funktioner är begränsade på objektet. För att bevisa det, låt oss försöka arbeta med en matematisk funktion och se vad som händer.
Python3
inkscape vs gimp
# An exception will be raised> from> math> import> *> exec> (> 'print(factorial(5))'> , {})> |
>
>
Det här exemplet borde ha skrivit ut 120 som utdata men istället visar det Ingen utdata och ger upp ett undantag. Även om vi har importerat mattemodulen, så fungerade inte factorial()-metoden på grund av restriktioner som vi har satt genom att skicka den globala parametern.
Vi kan också tillåta att några av de många funktionerna körs. Anta att vi vill att alla andra matematiska moduler ska begränsas utom funktionen factorial().
Python3
# factorial() will be executed> from> math> import> *> exec> (> 'print(factorial(5))'> , {> 'factorial'> :factorial})> |
>
>Produktion
120>
Vi kan också ändra namnet på dessa fördefinierade metoder och ge dem ett användardefinierat namn under körningen. Vi kan ändra namnet på funktionen från factorial() till faktum() , som är användardefinierad.
Python3
cloud computing-applikationer
# factorial() renamed as fact> from> math> import> *> exec> (> 'print(fact(5))'> , {> 'fact'> : factorial})> |
>
>Produktion
120>
I det här scenariot, genom att skicka både globala och lokala parametrar, kan vi skräddarsy beteendet hos exekverad kod till våra specifika krav, och visa upp mångsidigheten i dynamisk körning i Python.
Python3
from> math> import> *> exec> (> 'print(dir())'> , {> 'built'> : __builtins__}, {> 'sum'> :> sum> ,> 'iter'> :> iter> })> |
vad är undantagshantering i java
>
>Produktion
['iter', 'sum']>
Dynamisk exekvering i Python tillåter exekvering av specifika metoder som t.exsum()>
ochiter()>
tillsammans med inbyggda metoder inutiexec()>
funktion, som visar flexibiliteten hos dynamiskt körning i Python. Genom detta kan endast summan och iter-metoderna tillsammans med alla inbyggda metoder exekveras i exec()-funktionen. Vi kan också begränsa användningen av __builtins__ så här:
Python3
#__builtins__ has been restricted using None> from> math> import> *> exec> (> 'print(dir())'> , {> '__builtins__'> :> None> }, {> 'sum'> :> sum> ,> 'print'> :> print> ,> 'dir'> :> dir> })> |
>
>Produktion
['dir', 'print', 'sum']>