12 красивых ОДНОСТРОЧНЫХ конструкций на Python — сделай свой код конфеткой!

preview_player
Показать описание


Python — язык лаконичный, его любят за выразительность и читаемый код. Изучи эти 12 однострочных конструкций Python и применяй их в своих проектах, сделай код конфеткой!

0:00 - Введение
0:54 - 1. Распаковка
3:00 - 2. map вместо цикла
5:20 - 3. reduce вместо цикла
8:58 - 4. Comprehensions вместо цикла
11:34 - 5. filter вместо цикла или comprehensions
14:36 - 6. Быстрое копирование списка
17:07 - 7. Обратить список
18:03 - 8. in вместо if
19:55 - 9. all вместо сложного if
21:53 - 10. any вместо сложного if
22:37 - 11. Тернарный оператор вместо многострочного кода
24:20 - 12. Конфигурирование

/****************** about ******************/

Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:

Рекомендации по теме
Комментарии
Автор

Подготовили PDF шпаргалку, которую можно распечатать и держать перед глазами, чтобы быстрее всё запомнить:

Вжух!

tdigital
Автор

Относительно .split есть неточность: split() и split(" ") - не одно и то же. split() для разделения использует не только пробел, но и все whitespace символы, например, таб, а также последовательность таких символов рассматривается как один - сплитятся слова независимо от кол-ва пробелов между ними. split(" ") сплитит строго по одиночным пробелам

jornand
Автор

Нужно добавить, что копирование
вида L2 = L[:] является поверхностным копированием, а не полным. Это значит, что если есть вложенные в список структуры, например: ещё один список или словарь - то могу возникнуть проблемы. В таких случаях нужно использовать функцию deepcopy из модуля copy.

flashxl
Автор

Не, ну когда reduce добавили с лямбдой, уже усложнено для восприятия, лучше отдельной строкой это делать. Явное лучше неявного или как там в дзене...

sergepodkolzin
Автор

Так то можно и целиком модули/скрипты/программы упихивать в одну строку, но имхо, читаемость кода значительно выше в большинстве случаев, когда кодер не поленился и написал в несколько строк каждое действие пошагово, а не запихнул миллион действий в одну строку, действия в которой выполняются теперь и не слева направо и не справа налево, а в порядке, индивидуальном для каждого случая.
Что такое x * y * z понятно сразу, а редьюс от принципиально неименуемой функции и мапа с данными, которые хз какие они там придут вообще - это нифига без пузыря и не разберешься, нафига оно нужно тут

astoscope
Автор

Крутое видео, подача как всегда на уровне!
НО

Думаю, нужно было бы добавить про:
1. * в разделе про распаковку
2. copy, deepcopy
3. прекрасное нововведение py3.8 - walrus operator
4. _ в роли улучшения читаемости кода, когда значение не нужно, т.е.:
for _ in range(10):
pass
5. _ в роли разделителя для больших чисел:
for _ in range(1_000_000):
pass
*ну а вообще в таких случаях лучше писать 10**6

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

ssatskov
Автор

16:56 только что проверил данный код. На самом деле, это обычный аналог copy.copy функции, которая копирует не объект полностью, а лишь его структуру. Т.е. в случае, если ваш список будет многоуровневым (список в списке), то при изменении внутреннего списка, эти изменения отразятся и на скопированном списке.

Так что если нужно железобетонно скопировать список как полностью новый объект, то лучше воспользоваться функцией из модуля copy deepcopy.

alittlemoron
Автор

Первый пример:
А можно ведь и без .strip() обойтись, так как без параметров он убирает только whitespaces, а .split() по умолчанию с краёв их тоже уберёт. Т.е. для решения этой же задачи можно просто input().split()

ivanivanov-hlry
Автор

Хоть и всё изложенное использую, но с удовольствием посмотрел ролик, подача шикарная!)

kryzh_kit
Автор

Вопрос не по теме — а как вам картинка:)?

tdigital
Автор

только сейчас понял как работает map, про reduce не знал, спс за видео, как всегда топ

helish_
Автор

В последнем примере с условиями думал нововведение switch и case сейчас покажешь, ан нет, на деле другое исполнение донес :) спасибо, не знал

valarg
Автор

16:20 Кажется мне, что list(numbers) более читаемо, чем нецелево использованный слайс. И с разворотом то же самое -- есть reversed(). А вообще норм!

AntThinker
Автор

Братан как же приятно тебя слушать, очень позитивный чувак. За пять лет от галер до крупных банков ни одного хорошего человека на сеньере не встретил. 90 процентов это пассивно-агрессивные, злые, но трусливые шавки нолайферы, которые в технологиях сами еле-еле разбираются. Братан, есть у тебя команда? Я бы с удовольствием поработал с тобой.

hardline_fc
Автор

Видео хорошее, но важно помнить, что коротко, не всегда красиво и читаем. И автор говорит об этом. Не забывайте про pep8

codelearner
Автор

Из серии "хозяйке на заметку" - просто, легко, красиво. Приятно слушать человека, который знает, о чем говорит. Спасибо!

vladimir_s
Автор

Алексей, спасибо! Долго держал видео в закладках. В итоге, когда сейчас посмотрел, то всё уже знаю. Но, подача, как всегда, отличная. Спасибо ещё раз! Ждём новых подобных видео!

Vjidowkdkcpapqkfjfw
Автор

Очень полезное, а главное понятное видео, спасибо большое!

bernardsoul
Автор

Очень базовый и очень полезный видос. Спасибо автору, отличный формат, несешь добро людям )

restless_gypsy
Автор

Вместо последнего пункта напрашивается создать Интерфейс Group, от которого будут наследоваться AdminGroup, ManagerGroup и т.д. Они будут по разному определять метод process_request.Тогда вместо стринга можно в конструктор User передать Request через интерфейс

hjohbwn