Рассмотрим обязательные для понимания и использования киллер-фичи Python, поговорим о плюсах-минусах, особенностях, когда и что использовать.
Основные моменты:
1) все компсы и генэксп работают по принципу
[ВЫРАЖЕНИЕ/ПРЕОБРАЗОВАНИЕ for element in ИСТОЧНИК if УСЛОВИЕ]
читается это слева направо, что важно когда циклов больше 1.
2) принцип работы операций у листкомпс и генэксп одинаков, синтаксически различаются скобками
3) компсы (листкомпс, сеткомпс, дикткомпс) в результате своей работы формируют соответствующую коллекцию и занимают память
4) переменные созданные внутри компсов или генэкспа недоступны извне
5) генэксп вернет объект, а не коллекцию! при создании объекта он проверит источник, что может быть критично, если это какая то функция. Если источник не валидный то ошибка упадет при создании генератора, а не при попытке получить значение
6) генэксп ленивый, то есть ничего не делает и не занимает память пока не потребуется значение. Сгенерировав значение снова засыпает пока опять не попросят новое.
7) генэксп одноразовый, при исчерпании начинает бросать исключение, которое мы не увидим, если используем генератор в цикле for
8) генэксп может потенциально генерировать бесконечные последовательности, но он ничего не знает о порядке элементов или о их количестве (нет len)
Лично мое мнение - если вам не нужна длина, слайсы, индексы, то нужно использовать генэскп, не только из-за экономии памяти, но и из-за ленивости, экономии процессорного времени.
Естественно важно помнить что даже pep-8 и дзен - это не закон, а рекомендации, наша конкретная реализация и подход должны диктоваться имеющимися условиями и решаемой задачей.
Полезные ссылки:
docs.python.org/3/tutorial/da...
docs.python.org/3/reference/e...
docs.python.org/3/howto/funct...
docs.python.org/3/whatsnew/2....
Присоединяйся к помощи каналу, будет интересно)
✔️Бусти boosty.to/python_russian/donate
✔️Юмани 410011506612886
Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
#Python #PythonRussian #PyCharm
Негізгі бет Основное оружие питониста: Listcomps и Genexp
Пікірлер: 83