Ответ
Методы append() и extend() изменяют исходный список, но делают это по-разному. Понимание этой разницы критично для корректной работы с коллекциями данных в тестах.
list.append(item)
- Добавляет один элемент
itemв конец списка. - Если
itemявляется итерируемым объектом (например, другим списком), он будет добавлен как один вложенный элемент. - Длина списка увеличивается ровно на 1.
list.extend(iterable)
- Добавляет в конец списка все элементы из итерируемого объекта
iterable. - Итерируемый объект «раскрывается», его элементы добавляются по отдельности.
- Длина списка увеличивается на длину
iterable.
Наглядный пример с тестовыми данными:
# Исходные данные
test_results = ["PASS", "FAIL"]
new_batch_single = "SKIP"
new_batch_multiple = ["PASS", "PASS", "FAIL"]
# append() - добавляет элемент как есть
test_results.append(new_batch_multiple)
print(test_results) # Вывод: ['PASS', 'FAIL', ['PASS', 'PASS', 'FAIL']]
# extend() - «раскрывает» итерируемый объект
test_results = ["PASS", "FAIL"] # Сброс
test_results.extend(new_batch_multiple)
print(test_results) # Вывод: ['PASS', 'FAIL', 'PASS', 'PASS', 'FAIL']
# append() для одиночного элемента
test_results.append(new_batch_single)
print(test_results) # Вывод: ['PASS', 'FAIL', 'PASS', 'PASS', 'FAIL', 'SKIP']
Типичные ошибки и применение в QA:
- Ошибка: Использовать
append()для добавления элементов из другого списка, что приводит к неожиданной вложенности и усложняет последующие проверки (например,assert "PASS" in results). - Правильно: Использовать
extend()для объединения списков, например, при агрегации результатов нескольких прогонов тестов или сборе данных из разных источников. append()идеален для добавления одиночных результатов, логов или объектов.