<MyRusakov.ru />

Программирование на C++ в Unreal Engine 5

Программирование на C++ в Unreal Engine 5

Данный курс научит Вас созданию игр на C++ в Unreal Engine 5. Курс состоит из 12 разделов, в которых Вас ждёт теория и практика. Причём, в качестве практики будет создан весьма крупный проект объёмом свыше 5000 строк качественного кода, который уже на практике познакомит Вас с принципами создания игр на C++ в Unreal Engine 5.

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

Помимо самого курса Вас ждёт ещё и очень ценный Бонус: «Тестирование Unreal-проектов на Python», в рамках которого Вы научитесь писать очень полезные тесты для тестирования самых разных аспектов разработки игр.

Подробнее
Подписка

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

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Распаковка в Python: присваивание, * и ** на практике

Распаковка в Python: присваивание, * и ** на практике

Поисковый запрос «распаковка в Python» часто возникает у новичков, когда они видят код вроде a, b = b, a, first, *middle, last = items или func(**data). На первый взгляд это выглядит магически, но на практике распаковка — один из самых удобных базовых инструментов Python.

Распаковка позволяет взять элементы из последовательности или словаря и разложить их по переменным. Она делает код короче, уменьшает количество индексов и помогает избежать лишних временных переменных.

Простая распаковка списков и кортежей

Самый простой пример — присвоить элементы списка нескольким переменным:

point = [10, 20]
x, y = point

print(x)  # 10
print(y)  # 20

То же самое работает с кортежами:

user = ('Анна', 25, 'Python')
name, age, language = user

print(name)      # Анна
print(age)       # 25
print(language)  # Python

Важное правило: количество переменных слева должно совпадать с количеством элементов справа. Иначе Python выдаст ошибку.

values = [1, 2, 3]

# Ошибка: переменных 2, а значений 3
a, b = values

Обмен значений без временной переменной

Классический практический пример распаковки — поменять две переменные местами:

a = 5
b = 10

a, b = b, a

print(a)  # 10
print(b)  # 5

В других языках часто используют временную переменную, но в Python это делается одной строкой и читается очень естественно.

Распаковка с помощью звёздочки *

Если элементов может быть больше, чем переменных, используйте *. Такая переменная соберёт «лишние» элементы в список.

numbers = [1, 2, 3, 4, 5]

first, *rest = numbers

print(first)  # 1
print(rest)   # [2, 3, 4, 5]

Можно забрать первый и последний элемент, а середину собрать отдельно:

items = ['start', 'a', 'b', 'c', 'finish']

first, *middle, last = items

print(first)   # start
print(middle)  # ['a', 'b', 'c']
print(last)    # finish

Это удобно при обработке строк, таблиц, логов, CSV-данных и любых списков, где важны крайние элементы.

Игнорирование ненужных значений

Если какое-то значение не нужно, часто используют переменную _. Это соглашение: оно показывает читателю, что значение намеренно игнорируется.

user = ('Иван', 'ivan@example.com', 32)

name, _, age = user

print(name)  # Иван
print(age)   # 32

Если нужно отбросить несколько значений, можно сочетать _ со звёздочкой:

data = ['header', 'row1', 'row2', 'row3', 'footer']

header, *_, footer = data

print(header)  # header
print(footer)  # footer

Распаковка в циклах

Очень часто распаковка встречается в циклах. Например, при переборе списка кортежей:

users = [
    ('Анна', 25),
    ('Борис', 31),
    ('Ольга', 28),
]

for name, age in users:
    print(f'{name}: {age}')

Такой код проще, чем обращаться к элементам по индексам user[0] и user[1].

Ещё один частый пример — перебор словаря. Метод items() возвращает пары «ключ-значение», которые удобно распаковывать прямо в цикле:

prices = {
    'apple': 80,
    'banana': 120,
    'orange': 100,
}

for product, price in prices.items():
    print(f'{product}: {price} руб.')

Оператор * при создании списков

Звёздочка умеет не только собирать значения, но и распаковывать список внутрь другого списка:

first = [1, 2]
second = [3, 4]

result = [0, *first, *second, 5]

print(result)  # [0, 1, 2, 3, 4, 5]

Это удобная альтернатива сложению списков, особенно когда нужно вставить элементы в середину.

Оператор ** для словарей

Две звёздочки ** используются для распаковки словарей. Например, можно объединить настройки:

default_settings = {
    'theme': 'light',
    'language': 'ru',
    'notifications': True,
}

user_settings = {
    'theme': 'dark',
}

settings = {**default_settings, **user_settings}

print(settings)
# {'theme': 'dark', 'language': 'ru', 'notifications': True}

Если ключи совпадают, значение из словаря, который расположен правее, перезапишет предыдущее. В примере theme стал равен dark.

Передача аргументов в функцию через * и **

Оператор * можно использовать, чтобы передать список или кортеж как позиционные аргументы:

def create_user(name, age, city):
    return f'{name}, {age}, {city}'

data = ['Мария', 27, 'Казань']

print(create_user(*data))
# Мария, 27, Казань

А ** передаёт словарь как именованные аргументы:

def create_user(name, age, city):
    return f'{name}, {age}, {city}'

data = {
    'name': 'Мария',
    'age': 27,
    'city': 'Казань',
}

print(create_user(**data))
# Мария, 27, Казань

Важно: ключи словаря должны совпадать с именами параметров функции. Если в словаре будет лишний ключ, Python выдаст ошибку.

Частые ошибки при распаковке

  • Несовпадение количества значений. Если переменных больше или меньше, чем элементов, используйте * или проверьте структуру данных.
  • Неподходящие ключи при **. Имена ключей словаря должны совпадать с параметрами функции.
  • Слишком сложная распаковка. Если строка становится нечитаемой, лучше разбить её на несколько шагов.
  • Злоупотребление _. Игнорировать значения удобно, но если их много, возможно, стоит пересмотреть структуру данных.

Практические рекомендации

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

Если вы хотите не просто запомнить отдельные приёмы, а выстроить прочную базу Python от синтаксиса до практических проектов, посмотрите курс «Python с нуля до уверенного уровня: практика, задачи и реальные примеры». Он хорошо дополняет такие темы, как распаковка, функции, коллекции и работа с данными.

Краткий итог

Распаковка в Python — это способ удобно разложить элементы коллекции по переменным. Одинарная звёздочка * работает с последовательностями, двойная ** — со словарями. Эти инструменты особенно полезны в циклах, при передаче аргументов в функции и при сборке новых списков или словарей.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.