Отличие append() от extend()
Метод
Таким образом, метод
Дело в том, что
Метод
extend()
также используется для добавления элементов в список, но в отличие от append()
, он принимает итерируемый объект (например, другой список) и добавляет его элементы по отдельности.Таким образом, метод
extend()
объединяет содержимое двух списков, тогда как метод append()
просто добавляет новый элемент в конец списка.Дело в том, что
append()
добавляет один элемент, в то время как extend()
добавляет все элементы переданного списка поочередно.Конкатенация списков с использованием append()
Когда мы используем
Результат этого кода —
Когда мы используем
append()
с другим списком, происходит не конкатенация (слияние) списков в привычном понимании, а добавление одного списка как элемента в другой список.Результат этого кода —
list1 = [1, 2, 3, [4, 5, 6]]
. Теперь list2
стал элементом последнего элемента списка list1
.Недостатки map()
К недостаткам
Это неплохо на малых оборотах, но на практике, где данные весьма разнообразны, без просмотра результата вероятность ошибок на проде увеличивается: мы просто не увидим потенциальных проблем.
К недостаткам
map()
, так же как и в случае с filter()
, можно отнести «ленивую оценку» (Lazy Evaluation). Создатели языка сделали немало в 3-й версии, чтобы улучшить производительность языка, и потому вместо обработанного объекта по умолчанию нам возвращается ссылка на итератор. Пока мы не обернем ее в list()
или другой метод, обработка функцией-дочкой еще не произошла.Это неплохо на малых оборотах, но на практике, где данные весьма разнообразны, без просмотра результата вероятность ошибок на проде увеличивается: мы просто не увидим потенциальных проблем.
Целых 4 отсылки на Монти Пайтон
Гвидо ван Россум любит это шоу, и даже в документации указал, что: «Язык назван в честь шоу Би-би-си “Летающий цирк Монти Пайтона” и не имеет никакого отношения к рептилиям. Ссылки на скетчи Монти Пайтон в документации не только разрешены, но и поощряются!». Так что неудивительно, что в самом языке есть несколько отсылок к шоу.
Гвидо ван Россум любит это шоу, и даже в документации указал, что: «Язык назван в честь шоу Би-би-си “Летающий цирк Монти Пайтона” и не имеет никакого отношения к рептилиям. Ссылки на скетчи Монти Пайтон в документации не только разрешены, но и поощряются!». Так что неудивительно, что в самом языке есть несколько отсылок к шоу.
Можно и нужно использовать try — except
KeyError
Если при чтении файла метод json.loads() возвращает вместо словаря список, то при попытке обратиться к ключу message можно схватить такое исключение.
Эту ошибку легко допустить, когда не знаешь тип возвращаемого объекта.
Представьте, что мы выгружаем логи бота по дням, а в выходные не случилось ни одной беседы. Тогда программа вернет объект None («ничего») про воскресенье, и у него тоже нет ключа ‘message’. Здесь try — except играет важную роль: навесив такой блок, мы обработаем ситуацию с пустотами.
KeyError
Если при чтении файла метод json.loads() возвращает вместо словаря список, то при попытке обратиться к ключу message можно схватить такое исключение.
Эту ошибку легко допустить, когда не знаешь тип возвращаемого объекта.
Представьте, что мы выгружаем логи бота по дням, а в выходные не случилось ни одной беседы. Тогда программа вернет объект None («ничего») про воскресенье, и у него тоже нет ключа ‘message’. Здесь try — except играет важную роль: навесив такой блок, мы обработаем ситуацию с пустотами.
IndexError
Допустим, мы и дальше получаем список реплик бота, причем каждый день длина этого перечня разная. Если все же приходится при создании цикла опираться на некую константу, которая с количеством реплик не всегда совпадает, try — except поможет справиться с ошибкой индекса.
Указываем во второй части конструкции, с какой ошибкой может столкнуться скрипт.
Допустим, мы и дальше получаем список реплик бота, причем каждый день длина этого перечня разная. Если все же приходится при создании цикла опираться на некую константу, которая с количеством реплик не всегда совпадает, try — except поможет справиться с ошибкой индекса.
Указываем во второй части конструкции, с какой ошибкой может столкнуться скрипт.