Будет напечатано ['t', 'e', 'p', 'i']. x получает первый символ 's', z — последний 'k', а звёздочная переменная y собирает все промежуточные символы в список.
Деконструкция строки с применением оператора *
Будет напечатано ['t', 'e', 'p', 'i']. x получает первый символ 's', z — последний 'k', а звёздочная переменная y собирает все промежуточные символы в список.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В примере показан фрагмент Python‑кода, где строка разбивается на отдельные элементы с помощью оператора *. Строка 'stepik' распределяется между переменными x, y и z, после чего выводится значение переменной y. Укажите, какой вывод появится на экране. Варианты ответа:
- epik
- epi
- ['e', 'p', 'i', 'k']
- ['t', 'e', 'p', 'i']
- произойдет ошибка
- ['s', 't', 'e', 'p']
x, *y, z = 'stepik'
print(y)
Ответ
Будет напечатано ['t', 'e', 'p', 'i']. x получает первый символ 's', z — последний 'k', а звёздочная переменная y собирает все промежуточные символы в список.
Расширенная распаковка работает с любым подходящим итерируемым объектом, включая строку:
x, *y, z = 'stepik'
# x == 's'
# y == ['t', 'e', 'p', 'i']
# z == 'k'
Результат y — именно список, не строка. Для строки из двух символов он был бы пустым. Если элементов меньше двух, возникнет ValueError, потому что обязательным x и z не хватит значений.