Exec в питоне что это

exec () в Python

Может принимать три параметра:

Теперь посмотрим, как работает эта функция. В следующем коде мы использовали объектный код и выполнили его с помощью функции exec (). Мы только что приняли параметр объекта и пропустили два других поля.
Пример:

prog = ‘print(«The sum of 5 and 10 is», (5+10))’

Выход:
Сумма 5 и 10 составляет 15

Предупреждение или ограничения

Прежде чем использовать какие-либо методы внутри функции exec (), необходимо помнить о том, что все функции поддерживают exec (). Для просмотра этого мы можем использовать функцию dir ().
Пример:

# Класс математики используется для включения всех
# математические функции

Глобальные и локальные параметры

Python позволяет нам ограничивать использование различных переменных и методов с помощью глобальных и локальных параметров, которые могут не потребоваться. Эти локальные и глобальные параметры используются для локальных или глобальных переменных, в основном словарей. Глобальный параметр обгоняет, если локальный отсутствует, что означает, что глобальный может использоваться для обоих полей. Давайте посмотрим, как работает код, передавая только глобальный параметр.
Пример:

# Здесь мы прошли пустой словарь

Таким образом, мы видим, что при передаче пустого словаря в качестве глобального параметра отображается только __builtins__ и никакие другие математические функции не отображаются, как в предыдущем примере. Это означает, что только параметр __builtins__ будет поддерживаться для параметра объекта. Это говорит о том, что все другие функции ограничены на объекте. Чтобы доказать это, давайте попробуем поработать с математической функцией и посмотрим, что произойдет.
Пример:

Этот пример должен был печатать 120 в качестве вывода, но вместо этого он отображает «Нет вывода» и вызывает исключение. Хотя мы импортировали математический модуль, метод factorial () не работал из-за ограничений, которые мы установили, передавая глобальный параметр.
Мы также можем разрешить выполнение нескольких функций. Предположим, мы хотим, чтобы все остальные математические модули были ограничены, кроме функции factorial ().
Пример:

# factorial () будет выполнен

# factorial () переименован как факт

Теперь давайте посмотрим, что еще мы можем сделать для передачи как глобальных, так и локальных параметров. Используя локальные параметры, мы можем реализовать функции в соответствии с нашими потребностями.
Пример:

Благодаря этому внутри функции exec () могут быть выполнены только методы sum и iter вместе со всеми встроенными методами.
Мы также можем ограничить использование __builtins__ следующим образом:

#__builtins__ был ограничен с помощью None

Здесь только функции sum, print и dir будут выполняться внутри функции exec (), а не все встроенные методы.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Источник

Метод exec() в Python

Автор: Кольцов Д · Опубликовано 17.11.2020 · Обновлено 17.11.2020

Метод exec() выполняет динамически созданную программу, которая представляет собой строку или объект кода.

Метод принимает три параметра:

exec() не возвращает никакого значения, он возвращает None.

Пример 1

Пример 2: Разрешить пользователю вводить данные

Если вы хотите получить код Python от пользователя, который позволяет использовать многострочный код (с использованием ‘\ n’), вы можете использовать метод compile() перед использованием exec().

На что обратить внимание?

Рассмотрим ситуацию: вы используете систему Unix (macOS, Linux и т. Д.) И импортировали модуль ОС. Модуль os предоставляет переносимый способ использования функций операционной системы, таких как чтение или запись файла.

Если вы используете в своем коде exec (input()), рекомендуется проверить, какие переменные и методы может использовать пользователь. Вы можете увидеть, какие переменные и методы доступны, используя метод dir().

Ограничение использования доступных методов и переменных в exec()

Чаще всего все доступные методы и переменные, используемые в exec(), могут не понадобиться или даже могут иметь брешь в безопасности. Вы можете ограничить использование этих переменных и методов, передав необязательные глобальные и локальные параметры (словари) методу exec().

Параметры globals и locals опущены

Если оба параметра опущены (как в наших предыдущих примерах), код, ожидаемый от exec(), выполняется в текущей области. Вы можете проверить доступные переменные и методы, используя следующий код:

Передача глобальных параметров

Параметры globals и locals (словари) используются для глобальных и локальных переменных соответственно. Если словарь locals не указан, по умолчанию используется словарь globals. Это означает, что глобальные переменные будут использоваться как для глобальных, так и для локальных переменных.

Передача пустого словаря в качестве глобального параметра

Если вы передаете пустой словарь в качестве глобальных переменных, объекту доступны только __builtins__ (первый параметр для exec()). Несмотря на то, что мы импортировали математический модуль в вышеуказанную программу, попытка доступа к любой из функций, предоставляемых математическим модулем, вызовет исключение.

Обеспечение доступности определенных методов

Здесь код, который выполняется exec(), может также иметь методы sqrt() и pow() вместе с __builtins__.

Название метода можно изменить по своему желанию.

В приведенной выше программе squareRoot() вычисляет квадратный корень (функциональность аналогична sqrt()). Однако попытка использования sqrt() вызовет исключение.

Передача как глобальных, так и локальных словарей

Вы можете сделать необходимые функции и переменные доступными для использования, передав словарь locals. Например:

Здесь только два встроенных метода print() и dir() могут быть выполнены методом exec().

Важно отметить, что exec() выполняет код и не возвращает никакого значения (не возвращает None). Следовательно, вы не можете использовать операторы return и yield вне определений функций.

Источник

Сокрытые драгоценности Python

Особенности Python, о которых я даже не подозревал

В последнее время у меня появилось новое хобби – чтение документации Python просто для удовольствия! Когда вы читаете на досуге, то, как правило, замечаете интересные «лакомые кусочки», которые в противном случае пропустили бы. Итак, вот перечень «кусочков», которые заставили меня сказать:

О! Вы можете сделать это на Python?

1. Атрибуты функций

Подобно тому, как вы можете устанавливать атрибуты классов и объектов, вы также можете устанавливать атрибуты функций.

Мы установили атрибуты «optional_return» в строке 10 и «is_awesome» в строке 11. Мы получили доступ к этим атрибутам вне функции позднее в строках 19 и 20. Результат кода:

Это удобно, когда вы хотите, чтобы функция извлекала некую промежуточную переменную, но не возвращала её явно с оператором return каждый раз при вызове функции. Также обратите внимание, что атрибуты могут быть установлены как внутри определения функции, так и вне определения функции.

2. Цикл for-else

В Python вы можете добавить условие else в цикл for. Условие else будет срабатывать только в том случае, если во время выполнения в теле цикла не встретится оператор break.

All elements at least 3 letters long

Обратите внимание, что else имеет отступ на уровне for, а не на уровне if. Здесь ни один элемент не имеет длины короче трёх. Таким образом, никогда не будет встречен оператор break. Следовательно, условие else будет запущено (после выполнения цикла for) и выведется результат, указанный выше.

Можно утверждать, что этого можно достичь с помощью отдельной переменной, которая отслеживает встретился ли оператор break. И, возможно, для другого человека, читающего код, это будет также менее запутанно. Далее приведен эквивалентный путь достижения того же результата:

Думаю, это полезно знать.

3. Разделители для int

Трудно визуально различить целые числа подобные 10000000 и 100000000 (они даже разные числа?). Мы не можем использовать запятые здесь, в Python, подобному тому, как мы используем их в английском языке, потому что Python интерпретирует это как кортеж из нескольких целых чисел.

У Python есть очень удобный способ справиться с этим: мы можем использовать подчеркивание как разделитель для улучшения читабельности. Таким образом, 1_000_000 будет интерпретироваться как целое число.

4. eval () и exec ()

В Python есть возможность динамически считывать строку и обрабатывать её как часть Python кода. Это достигается использованием функций eval() и exec() (‘eval’ для вычисления выражений; и ‘exec’ для выполнения операторов).

В третьей строке функция eval() считывает входную строку как выражение Python, оценивает её и присваивает результат переменной b. В строке 6 функция exec() считывает входную строку как оператор Python и исполняет её.

В целом, в более широком контексте программирования (не только в отношении Python) использование eval/exec невероятно сильно, поскольку позволяет вам писать динамический код, который использует информацию, доступную во время выполнения, для решения проблем, которые не могут быть даже выражены во время компиляции. […] exec – это буквально интерпретатор Python, встроенный в Python, поэтому, если у вас есть особенно сложная проблема для разрешения, один из способов её решить – написать программу для *написания программы для её решения*, затем использовать exec для запуска этой второй программы.

Вы можете прочитать об этом в замечательном объяснении Стивена Д’Апрано.

5. Многоточие (Ellipsis)

5.1. Замена для ненаписанного кода

Подобно pass, константы можно использовать в качестве замены, когда код не полностью написан, но требует некоторого заполнения для синтаксической правильности.

5.2. Альтернатива NONE

None выбирают, когда хотят обозначить пустой ввод или возврат. Но иногда None может быть одним из ожидаемых входных или возвращаемых параметров функций. В этом случае Многоточие может служить заменой.

Функция nth_odd() вычисляет n-ое нечетное число, c учетом n. Функция original_num() вычисляет исходное число n, учитывая n-ое нечетное число. Здесь None – один из ожидаемых входных параметров функции original_num(), так что мы не можем использовать его как замену по умолчанию для аргумента m. Результат кода:

This function needs some input
Non integer input provided to nth_odd() function
9 is 5th odd number
16 is not an odd number

5.3. Нарезка массива в NumPy

NumPy использует многоточие для нарезки массива. Следующий код показывают два эквивалентных способа нарезки:

[ 0 2 4 6 8 10 12 14]
[ 0 2 4 6 8 10 12 14]

Таким образом, ‘…’ показывает, что существует столько ‘:’, сколько необходимо.

Логическое значение Многоточия

TL; DR

Итак, я обнаружил следующие интересные особенности.

Атрибуты Функций: присвоение атрибутов функциям, как и объектам.

Цикл for-else: отслеживание, был ли цикл выполнен без оператора break.

Разделители для int: 32_534_478 – это int.

eval() и exec(): читайте строки как код Python и запустите его.

Многоточие: универсальная встроенная константа.

Напутствие

Python – это не только полезный язык, но и действительно интересный. Все мы заняты своей жизнью, но это не мешает узнавать язык ради него самого. Я бы хотел узнать больше о Пасхальных Яйцах, которые вы, возможно, найдёте.

Источник

Понимание метода Python Exec ()

Поэтому сегодня в этом руководстве давайте узнаем о методе Python Exec () в Python.

Понимание метода Python Exec ()

Итак, сегодня в этом руководстве, давайте узнаем о Метод Python Exec () в Python Отказ

Метод Python Exec ()

В основном, Python EXEC () Способ выполняет пропущенный набор кода в виде строки. Это очень полезно, так как практически поддерживает динамическое выполнение. Синтаксис для метода приведен ниже.

Здесь объект Может быть строка, открытый файл объект или объект кода.

И два дополнительных аргумента глобал и Местные жители должно быть Словари используется для глобальных и локальных переменных.

Теперь, когда у нас уже есть основная идея EXEC () Метод, давайте попробуем понять, что это работает через пример.

Понятно из вышеуказанного фрагмента кода, Печать () Заявления успешно выполнены EXEC () метод, и мы получаем желаемые результаты.

Работа с методом Python Exec ()

Теперь давайте прыгаем прямо в некоторые примеры, исследующие, как EXEC () Метод работает в Python с и без глобал и Местные жители Параметры.

1. Без глобальных и локальных параметров

В предыдущем примере мы просто выполняли какой-то набор инструкций в Python, передавая аргумент объекта для EXEC () метод. Но мы не видели имена в текущем объеме.

Теперь будем использовать dir () Способ получения списка текущих методов и имен с Математика Модуль включен перед вызовом EXEC () метод.

Это поднимает большую проблему безопасности, думая о выполнении Динамический код Python Отказ Пользователь может включать в себя некоторые модули для доступа к командам системы, которые даже могут сбояться с компьютером. Используя глобал и Местные жители Параметры, которые мы можем буквально ограничить EXEC () Выйти за пределы методов, которые мы хотим получить доступ.

2. С параметром глобалей

Теперь давайте посмотрим, как мы можем использовать Python EXEC () Метод с глобал параметр. Python позволяет нам пройти и указывать только методы, которые мы хотим EXEC () Способ доступа (в виде словаря) из Встроенный модуль.

В указанном выше коде мы прошли словарь, содержащий методы Squareno () (Сопоставлено на пользовательское имя Square ) и Печать () Отказ Примечание, используя любой другой метод из Встроенный Метод поднимет Типеррор Отказ

3. С параметром Locals

Когда мы пройдем только Местный Параметр ( Словарь ) по умолчанию все Встроенный Методы также доступны до тех пор, пока мы не исключаем их явно не исключаем.

Посмотрите на пример ниже, хотя мы указали Местные жители Словарь всех Встроенный и Математика Методы модуля доступны в текущем объеме.

Следовательно, теперь явно исключая Встроенные Отказ

В коде выше, ограничивая EXEC () Способ использования только прохожденных ( local ) методы практически делает POW () метод недоступный. Следовательно, во время бега мы получаем Типеррор Отказ

exec () vs eval () в python

Существует два основных различия между Eval () и EXEC () Методы, даже если почти не выполняют ту же работу.

Заключение

Так что это за сегодня. Надеюсь, у вас было четкое понимание работоспособности, используя Python EXEC () метод.

Для любого дальнейшего питона EXEC () Связанные вопросы, не стесняйтесь спрашивать в комментариях ниже.

Источник

Understanding the Python exec() Method

Exec в питоне что это. Смотреть фото Exec в питоне что это. Смотреть картинку Exec в питоне что это. Картинка про Exec в питоне что это. Фото Exec в питоне что это

So today in this tutorial, let’s get to know about the Python exec() method in Python.

The Python exec() Method

Basically, the Python exec() method executes the passed set of code in the form of string. It is very useful as it practically supports dynamic execution. The syntax for the method is given below.

Here, object could be a string, an open file object, or a code object.

And the two optional arguments globals and locals must be dictionaries used for the global and local variables.

Now that we already have a basic idea of the exec() method, let us try to understand it’s working through an example.

It is clear from the above code snippet, the print() statements are successfully executed by the exec() method and we get the desired results.

Working with the Python exec() Method

Now let us jump right into some examples exploring how the exec() method works in Python with and without the globals and locals parameters.

1. Without Global and local Parameters

In the previous example, we simply executed some set of instructions in Python passing the object argument to the exec() method. But, we didn’t see the names in the current scope.

Now let us use the dir() method to get the list of current methods and names with math module included before calling the exec() method.

Output:

This raises a big security issue when thinking of executing dynamic Python code. A user may include some modules to access system commands that even can crash your computer. Using the globals and locals parameters we can literally restrict the exec() to go beyond the methods that we want to access.

2. With globals parameter

Now let us see how we can use the Python exec() method with the globals parameter. Python allows us to pass and specify only the methods that we want the exec() method to access(in the form of a dictionary) from the builtin module.

Output:

3. With locals parameter

When we only pass the local parameter(dictionary), by default all the builtin methods are also made available until and unless we explicitly exclude them.

Look at the example below, here though we have specified the locals dictionary all the builtin and math module methods are available in the current scope.

Output:

Hence, now explicitly excluding the builtins.

Output:

exec() VS eval() in Python

There are two major differences between the eval() and exec() methods even though nearly do the same job.

Conclusion

So that’s it for today. Hope you had a clear understanding of the working as well use of the Python exec() method.

For any further Python exec() related questions, feel free to ask in the comments below.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *