# exec()

Функция `exec()` в Python используется для динамического выполнения программного кода, представленного в виде строки или объекта кода.

**Назначение**: Основная цель функции `exec()` - выполнить указанный программный код в текущей среде выполнения. Это позволяет динамически создавать и выполнять код во время работы программы.

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

**Описание**: Синтаксис функции `exec()` следующий:

```python
exec(object, globals=None, locals=None)
```

* `object` - это строка или объект кода, содержащий программный код Python для выполнения.
* `globals` (необязательный) - словарь, представляющий глобальную область видимости для выполняемого кода.
* `locals` (необязательный) - словарь, представляющий локальную область видимости для выполняемого кода.

Обратите внимание, что использование `exec()` с недоверенными данными может представлять риск для безопасности, так как это позволяет выполнять произвольный код.

**Примеры использования**:

1. Выполнение простого кода
2. Выполнение кода с определением функции
3. Использование `exec()` с глобальной и локальной областями видимости
4. Динамическое создание классов
5. Выполнение кода из пользовательского ввода (не рекомендуется по соображениям безопасности)

{% tabs %}
{% tab title="1." %}
```python
exec("print('Hello, World!')")  # Выведет "Hello, World!"
```
{% endtab %}

{% tab title="2." %}
```python
exec("""
def greet(name):
    print(f"Hello, {name}!")
""")

greet("Alice")  # Выведет "Hello, Alice!"
```
{% endtab %}

{% tab title="3." %}
```python
globals_dict = {"x": 5}
locals_dict = {"y": 10}

code = "result = x + y"
exec(code, globals_dict, locals_dict)
print(locals_dict["result"])  # Выведет 15
```
{% endtab %}

{% tab title="4." %}
```python
class_definition = """
class MyClass:
    def __init__(self, value):
        self.value = value

    def get_value(self):
        return self.value
"""

exec(class_definition)
obj = MyClass(42)
print(obj.get_value())  # Выведет 42
```
{% endtab %}

{% tab title="5." %}
```python
user_input = input("Введите код Python: ")
exec(user_input)
```
{% endtab %}
{% endtabs %}

Функция `exec()` полезна в ситуациях, когда необходимо динамически выполнять код во время работы программы, например, при создании интерпретаторов, реализации встраиваемых языков, динамическом генерировании кода или метапрограммировании. Однако ее следует использовать с осторожностью, так как она позволяет выполнять произвольный код, что может представлять риск для безопасности, если код получен из недоверенных источников.
