Давайте разберем, что выведет программа по шагам.
1. **Глобальные и локальные переменные:**
- Переменная `a` объявлена как `global a` внутри функции `f()`. Это значит, что функция будет работать с глобальной переменной `a`, которая определена вне функции.
- Переменная `b` внутри функции `f()` является локальной (если не объявлена как global).
2. **Инициализация:**
- `a = 1` - Глобальная переменная `a` инициализируется значением 1.
- `b = 2` - Глобальная переменная `b` инициализируется значением 2.
3. **Вызов функции `f()`:**
- `global a` - Указывает, что внутри функции `f()` переменная `a` будет глобальной.
- `b = 2` - Локальная переменная `b` внутри `f()` устанавливается в 2.
- `a, b = b, a` - Глобальная переменная `a` и локальная `b` меняются местами. То есть, `a` становится равной 2, а `b` (локальная) становится равной 1.
- `print(a, b, end = "")` - Выводит значение `a` (глобальной, равной 2) и локальной `b` (равной 1) без пробела в конце. Таким образом, выводится `21`.
4. **После вызова функции `f()`:**
- Глобальная переменная `a` теперь равна 2.
- Глобальная переменная `b` по-прежнему равна 2 (она не изменялась внутри функции).
- `print(a, b, end = "")` - Выводит значение `a` (равной 2) и `b` (равной 2) без пробела в конце. Таким образом, выводится `22`.
5. **Общий вывод:**
- Сначала выводится `21` из функции `f()`.
- Затем выводится `22` после вызова функции.
Итоговый вывод программы: `2122`
Ответ: 2122