18 Фишек Python о которых мало кто говорит

  Рет қаралды 41,428

ZProger [ IT ]

ZProger [ IT ]

Күн бұрын

⭐ Курс ООП и Приват канал: www.zproger-school.com/?...
⭐ Телеграм канал: t.me/+E0yQKpGvbLk4ODQ5
В данном видео рассмотрим 18 фишек в Python, о которых редко говорят другие разработчики, к подобным фишкам относятся Ellipsis и NotImplemented, также различные подходы в использовании уже известных технологий, вроде декораторов, list comprehension и т.д.
📁 Github: github.com/Zproger
📁 Связаться со мной: zproger777@gmail.com
📁 Все плейлисты с уроками: bit.ly/39GaY89
📁 Поддержать криптовалютой: github.com/Zproger/donate
0:00 - 1. Ellipsis и NotImplented в Python
2:39 - 2. Возможности и фишки дата-классов
4:10 - 3. Модуль this. Zen of Python
4:35 - 4. Анонимные функции и их главные особенности
5:39 - 5. List/Set comprehension и сравнение с обычным циклом
6:56 - 6. Dict comprehension, автоматически заполняем словари
7:08 - 7. Заполнение кортежей и создание генераторов
7:22 - 8. Поменять значение переменных местами
7:36 - 9. Как поставить условие в любой генератор?
8:13 - 10. Запоминаем значения в REPL
8:41 - 11. Проверить версию интерпретатора для совместимости библиотек
9:27 - 12. Несколько фишек с декораторами Python
10:50 - 13. Вернуть несколько значений из функции
11:10 - 14. Объединить словари, 2 способа на разных версиях Python
11:32 - 15. Несколько примеров с slice Python
12:15 - 15. Сколько объект занимает места в памяти?
12:28 - 17. Разные способы принимать args и kwargs Python
13:18 - 18. Удалить все дубликаты из списка
13:57 - Много крутых фишек в след.видео, если наберем 1000 лайков =)

Пікірлер: 120
@smitacer8938
@smitacer8938 Жыл бұрын
Добавил бы, что генераторы списка быстрей работают т.к. не выполняется .append. Присваивание lambda-функции, как по мне, противоречит самому её назначению "анонимной функции", и гораздо читаемо будет выглядеть обычный def.
@zproger
@zproger Жыл бұрын
Спасибо за комментарий, он хорошо дополняет видео
@jurissiberian7568
@jurissiberian7568 Жыл бұрын
Уточнение. Функция в пайтон возвращает только одно значение, в примере на видео - кортеж. Да, кортеж может содержать кучу данных, но возвращаемый из функции кортеж - это одно значение. При использовании type hinting (def func() -> tuple:) это становится более очевидным. По-моему, только Golang может возвращать несколько значений.
@user-bk8wg7hk2b
@user-bk8wg7hk2b Жыл бұрын
Ура, мне не придётся это писать) Спасибо что уже сделал это
@endlessvd
@endlessvd Жыл бұрын
А на C++ функции через ссылки и указатели могут возвращать сколь угодно много значений, лол
@dann1kid
@dann1kid Жыл бұрын
может, через запятую несколько значений, для приема которы требуется несколько переменных
@animatea8602
@animatea8602 Жыл бұрын
@@dann1kid и это всё равно будет кортеж
@predatel_rodini
@predatel_rodini Жыл бұрын
А ещё если написать 1 + 2 то получится 3. Эб этой фишке python многие не знают.
@zproger
@zproger Жыл бұрын
Это да
@mayonez5925
@mayonez5925 Жыл бұрын
А 0.1+0.2 != 0.3
@mrdixioner
@mrdixioner Ай бұрын
Спасибо огромное!!!
@user-we3xm4uc4k
@user-we3xm4uc4k 11 ай бұрын
Благодарю за фишки!
@user-bk8wg7hk2b
@user-bk8wg7hk2b Жыл бұрын
С множествами можно показать ещё возможность создавать новое множество, в котором есть только те значения, которые есть в одном множестве, но нет в другом. Короче подобие битовой XOR операции. {1, 2, 3, 4, 5} ^ {3, 4, 5, 6} -> {1, 2, 6} Помогает когда есть два огромных списка(больше пары сотен значений например), которые должны быть одинаковыми, но по какой-то причине не одинаковы. Вот эти исключения этот приём помогает отыскать :) Очень специфическая штука, пригодится одному из сотни прочитавших, но писать свою реализацию такой операции занимает 10 минут. (У меня из-за невнимательности отняло 40-60)
@tuesok6462
@tuesok6462 Жыл бұрын
Лайк поставил, жду следующего видео)
@zproger
@zproger Жыл бұрын
=)
@kodeng6333
@kodeng6333 Жыл бұрын
1) NotImplemented в идеале заменить NotImplemented Error и выкидывать как исключение, а не возвращать (raise NotImplementedError), при вызове будет исключение, а не unexpected-behavior. 2) Анонимные функции не стоит использовать часто, в основном используется в map / filter / reduce (Пример: map(lambda x: x ** 2, [1, 2, 3, 4]))
@renat9933
@renat9933 Жыл бұрын
анонимные функции прекрасно прокидываютая в колбеки вообщем сахарит код злоупотребление конечно зло(мапы и генераторы в 2 экрана длиной видали:))
@anndreiko
@anndreiko 3 ай бұрын
​@@renat9933а можно по джунски пожалуйста?😁
@mylife-ej8et
@mylife-ej8et Жыл бұрын
Хочу вас попросить, а будет ли такая возможность сделать несколько видео про ассинхронный python
@zproger
@zproger Жыл бұрын
Будет, обязательно сделаю видео =)
@mylife-ej8et
@mylife-ej8et Жыл бұрын
@@zproger спасибо большое, ценю такой качественный контент, очень нравиться ваш подход к видео роликам, обязательно продолжайте в том же духе
@MachtFeuer
@MachtFeuer Жыл бұрын
Вам привет из Казахстана, начал смотреть Ваши видео - и учиться программированию :)
@zproger
@zproger Жыл бұрын
И вам привет =))
@rolandwalker4434
@rolandwalker4434 Жыл бұрын
На счёт дата класса, ещё есть именнованый картеж, тоже классная штука
@Dmitrii-Zhinzhilov
@Dmitrii-Zhinzhilov Жыл бұрын
Благодарю! 🔥
@zproger
@zproger Жыл бұрын
=)))
@dary508
@dary508 Жыл бұрын
Ку, что за редактор ты используешь??? Красивый
@disadiuauiosdaiaudiossaais8862
@disadiuauiosdaiaudiossaais8862 Жыл бұрын
А где ты обрабатываешь видео?
@IvanIvanov-dh3sg
@IvanIvanov-dh3sg Жыл бұрын
Спасибо за отличное видео, автор вы молодец =)
@zproger
@zproger Жыл бұрын
Благодарю!
@girfeo9338
@girfeo9338 Жыл бұрын
Спасибо за работу, лайк для продвига
@zproger
@zproger Жыл бұрын
Благодарю
@seoonlyRU
@seoonlyRU Жыл бұрын
Спасибо, и правда отлично! Лайк от СЕООНЛИ
@user-ly6jh3pc6z
@user-ly6jh3pc6z Жыл бұрын
Боже, как всегда лучший!
@zproger
@zproger Жыл бұрын
😉
@user-ly6jh3pc6z
@user-ly6jh3pc6z Жыл бұрын
@@zproger Подскажи, пожалуйста, в связи с тем что Heroku прекратил работу на территории РФ, какой бы ты ещё сервер для телеграмм ботов мог бы посоветовать?
@TS666
@TS666 3 ай бұрын
5:45 - list(range(20)) выполняется быстрее [x for x in range(20)], а результат один и тот же.
@rasrabotchik
@rasrabotchik Жыл бұрын
Один из лучших!!!
@zproger
@zproger Жыл бұрын
Благодарю!
@ARSEN55630
@ARSEN55630 Жыл бұрын
Спасіба за відео.
@zproger
@zproger Жыл бұрын
Рад что понравилось
@vlatterran
@vlatterran Жыл бұрын
Я, когда кто-то сохраняет лямбду в переменую: чел, ты... На счёт декораторов: я осмелюсь предположить, что если ты не знаешь про них, то либо ты не разработчик на питоне, а используешь его как побочный инструмент, либо ты совсем новичок Когда возвращаешь много значений из функции, нв самом деле ты возвращаешь кортеж из этих значений Про *args и **kwargs стоило упомянуть, что это в основном для лекораторов, где сигнатуры подменяются. А то налепят своих кваргов, пойди потом разбери что и как в функцию передать надо. Ну и чисто как по мне - вариант произношения ки варгс странное, либо кварги/кваргс, либо уж полностью keyword arg(ument)s
@dmitriyneledva4693
@dmitriyneledva4693 Жыл бұрын
Круто, я не знал, что * и ** это про распаковку, не смотрел на это именно таким образом
@mainhero1264
@mainhero1264 Жыл бұрын
Спасибо за фичи🔥 Какая у Вас тема в VsСode?
@zproger
@zproger Жыл бұрын
Dracula
@mainhero1264
@mainhero1264 Жыл бұрын
@@zproger 🙂
@user-wj2gc8ke4j
@user-wj2gc8ke4j Жыл бұрын
Простые полезные штуки. Про элипсис только не сказал, что он используется для отображения бесконечно вложенной рекурсии. in_me = [1] in_me.append(in_me) print(in_me) # [1, [... ]]
@Galano-vx7xy
@Galano-vx7xy Жыл бұрын
Привет,а что за линукс дистрибутив у тебя?)
@utsupp1274
@utsupp1274 Жыл бұрын
дженту
@zproger
@zproger Жыл бұрын
Zorin OS
@amletixq
@amletixq Жыл бұрын
6:14 Можно еще заменить вторую запись этим: res2 = list(range(number))
@zproger
@zproger Жыл бұрын
😎
@metasy_
@metasy_ Жыл бұрын
[*range(x)]
@andrewbobrow3815
@andrewbobrow3815 9 ай бұрын
Фокус с преобразованием списка в множество для удаления дубликатов содержит маленькую засаду - множество не гарантирует упорядоченность элементов, а вдруг для вас порядок элементов в исходном списке имеет значение даже при удаленных дубликатах
@danielleroy3822
@danielleroy3822 Жыл бұрын
Гераторы и списковые включения не одно и то же. Генератор возвращает итерируемый обьект, в то время как list comprehensions возвращает список. Вообще списковые включения это очень приятный синтаксический сахар. А у генераторов есть цель: экономить затраты по ОЗУ.
@zproger
@zproger Жыл бұрын
Согласен, это разные вещи. Я подразумеваю генератор как "генератор значений", а не технологию из Python
@yabanciyim
@yabanciyim Жыл бұрын
Одно уточнение. Генераторов картежей в пайтоне не существует. В круглых скобках генерируются итераторы. Именно к ним мы можем применить метод next () ))...
@marcb5832
@marcb5832 Жыл бұрын
Во-первых, кОртежей. Во-вторых, не итераторы, а генераторы, к ним и применяется метод next.
@mylife-ej8et
@mylife-ej8et Жыл бұрын
Я год учусь, усердно и о всём этом знаю, контент хороший продолжать в том же духе
@zproger
@zproger Жыл бұрын
Так держать =)
@metasy_
@metasy_ Жыл бұрын
ну, это круто что ты все это узнал всего за год
@vangog8595
@vangog8595 Жыл бұрын
харош, удачи
@mifonix88
@mifonix88 11 ай бұрын
Любли подобные конструкции [2]+[i for i in range(1,1001,2) if len([j for j in range(1,i+1) if not i % j]) == 2] (выведет все простые до 1000) Бывает напишишь в одну строку такого, что на следующий день без бутылки хрен разберёшься))) Надо делать подобные конструкции либо оч короткие, или лучше вообще использовать for. Ибо читается код чаще чем пишится.
@orkooshov
@orkooshov Жыл бұрын
А еще из интересного, в Python 3.8 добавили оператор := Пример: x = 4 if (y := x) == 4: print(x, y) #output: 4, 4
@orkooshov
@orkooshov Жыл бұрын
Еще pattern matching - интересная тема. Добавлен в Python 3.10
@zproger
@zproger Жыл бұрын
Да, об этих темах есть видео на канале: kzbin.info/www/bejne/kHPZXnpqq92rr8U kzbin.info/www/bejne/oHqplnd6m5tsi80
@gedemin7420
@gedemin7420 Жыл бұрын
Спасибо
@zproger
@zproger Жыл бұрын
;)
@ARSEN55630
@ARSEN55630 Жыл бұрын
Спасіба, elipsis я найшов шо ти робиш!
@zproger
@zproger Жыл бұрын
:)
@--wat--
@--wat-- Жыл бұрын
6:29 можно использовать range(x)
@user-yx8gu4hm6z
@user-yx8gu4hm6z Жыл бұрын
Супер! Спасибо.
@zproger
@zproger Жыл бұрын
=)
@SerhiiVielkin
@SerhiiVielkin Жыл бұрын
Про елипсис не знал) Всегда пользовался pass
@zproger
@zproger Жыл бұрын
круто =)
@AlexandrSpirit
@AlexandrSpirit Жыл бұрын
анонимные функции решают проблему с блокировками при асинхронной работе
@wavilen1
@wavilen1 Жыл бұрын
У вас программа вывода аудио - информации зациклена по 3 - 4 раза, повторяете 1 и тоже. Выходите вовремя из цикла. Или не пользуйтесь ВАЙЛ.
@anonsd5521
@anonsd5521 3 ай бұрын
Гугл перевод Зен Пайтона это нечто
@lolbefree
@lolbefree Жыл бұрын
я сегодня узнал что анонимные функции так использовать нельзя "PEP 8: E731 do not assign a lambda expression, use a def" Нужно обьявлять функцию вместо переменной
@brothersstudio3566
@brothersstudio3566 Жыл бұрын
потому что лямбда нужна там, где требуется обьект функции и с не очень большим функционалом, в остальном же лучше использоваться обычную
@zproger
@zproger Жыл бұрын
Неплохо =)
@lolbefree
@lolbefree Жыл бұрын
@@brothersstudio3566 не тут написано точно do not assign a lambda expression, use a def
@timofeytislenko3680
@timofeytislenko3680 Жыл бұрын
2 полезные фишки, но для новеньких (хз как назвать тех, кто даже до начинающих не дотягивает) я бы добавил контейнеры.
@Alpha_Gamma_Beta
@Alpha_Gamma_Beta Жыл бұрын
ооо... помню, в детстве была олимпиадная (паскаль) задачка. поменять две переменные местами, не использую третью.)) а питон так просто может
@sovenok-hacker
@sovenok-hacker Жыл бұрын
Про this я знаю.
@zproger
@zproger Жыл бұрын
=)
@user-qi6zo5tw6t
@user-qi6zo5tw6t Жыл бұрын
Не троеточие, а МНОГОТОЧИЕ!
@zproger
@zproger Жыл бұрын
ок =)
@dodokwak
@dodokwak Жыл бұрын
спс. большая часть знакома. просьба когда-нибудь включить кратко-тезисное разъяснение оператора & (который НЕ &&). thx ещё раз.
@zproger
@zproger Жыл бұрын
Спасибо
@BigMemes-jd3tb
@BigMemes-jd3tb Жыл бұрын
7:55 Я тебе щас руки оторву res2 = [x for x in range(0, 20, 2)]
@user-vq2ys3bv5x
@user-vq2ys3bv5x 8 ай бұрын
А можно каждого слово было повторить не 30 а 1000 раз к примеру? Пришлось ставить скорость 1,5 чтобы как то усвоить смысл .
@sashevich
@sashevich Ай бұрын
какой баянище все это в начальном обучении любого курса
@topdich6181
@topdich6181 Жыл бұрын
С последним советом нужно быть очень аккуратным, т.к. при преобразовании списка во множество автоматически происходит его сортировка. Т.е. при выполнении команды list(set([3, 2, 1])) получим список [1, 2, 3]
@sashaklymyk4870
@sashaklymyk4870 Жыл бұрын
В множествах (set) элементы не сортируются, они вообще не упорядочены, у них нет индекса. Попробуй заполнить set строками и вызвать print несколько раз, тогда каждый раз элементы множества будут в разном порядке Например: set('1', '2', '3') print(set) 1 2 3 2 3 1 3 1 2 и т.д
@yawneed
@yawneed Жыл бұрын
EBI RCI BUS
@zproger
@zproger Жыл бұрын
=)
@robertobokarev439
@robertobokarev439 Жыл бұрын
Всё знаю из этого) Правда жалко, что Гвидо отказался делать лямбду многострочной, очн не хватает порой(((
@zproger
@zproger Жыл бұрын
Было бы неплохо =)
@user-wj2gc8ke4j
@user-wj2gc8ke4j Жыл бұрын
Нееет! Порой заворачивают такие однострочники с лямбдами, что хоть всех святых выноси. Разбираешься в этом нагромождении столько же, сколько в сотне строк. Дай им многострочные лямбды, и код уже никто не сможет поддерживать
@metasy_
@metasy_ Жыл бұрын
ну можно конечно сговнокодить, но если взять тапл и перечислять строки для выполнения, то по сути будет ограниченная многострочность (можно вместо '=' использовать ':=')
@predatel_rodini
@predatel_rodini Жыл бұрын
Def чем плох?
@user-wj2gc8ke4j
@user-wj2gc8ke4j Жыл бұрын
@@predatel_rodini def всем хорош. Просто его нецелесообразно заводить, когда нужна однострочная функция, которая больше не будет использоваться в коде.
@user-ey8ff2gd9p
@user-ey8ff2gd9p Жыл бұрын
Что интересно, Доусон об этом всём не пишет
@vangog8595
@vangog8595 Жыл бұрын
что за доусон
@psevdonim753
@psevdonim753 Жыл бұрын
Никто никогда не оскорблял слово ''this'' тем, что произносил его как ''зис'' 🤣🤣🤣🤣🤣🤣
@tpsevandovski
@tpsevandovski 7 ай бұрын
... if ... else ... if ... else ...
@user-nu3ot7td1j
@user-nu3ot7td1j 8 ай бұрын
18 фишек в пайтон, о которых ты знаешь, программируя на пайтон около 6 месяцев. Такие себе фишки. Рассказали бы например, что можно писать не только *args и **kwargs, а например *book **books, про метаклассы, про дескрипторы, вот это фишки, а так видео, ну для очень начинающих
@NikitaGriboedov
@NikitaGriboedov Жыл бұрын
list comprehension - это не генераторы, а генераторы - это генераторы, это очень неправильное удобство
@zproger
@zproger Жыл бұрын
Согласен, стараюсь от этой привычки избавится =) Но тут скорее генератор не в прямом смысле, а именно как технология которая генерирует значения
@ko-prometheus
@ko-prometheus Жыл бұрын
☯☯☯☯☯
@soohoy8256
@soohoy8256 Жыл бұрын
Я только учусь писать код, зачем я это смотрю?
@zproger
@zproger Жыл бұрын
Чтобы сразу писать правильно =)
@lapki322-
@lapki322- Жыл бұрын
Эммм, называть list comprehension генератором - это жесть и полная дичь. И оправдываться, что мне так удобно говорить еще большая дичь. Генератор выполнятся лениво, а comprehension сразу. Если поставить круглые скобки, да это будет генератор - но это не имеет никакого отношения к кортежам. Честно, совету автору повысить свою грамотность в питончеке в первую очередь, а потом уже вещать на широкую аудиторию.
@b27etula82
@b27etula82 Жыл бұрын
Многоточие, а не троеточие
@Sadownick
@Sadownick Жыл бұрын
Блин, ну все хорошо, но фраза «троеточие» ну ваще позор режет слух... многоточие, многоточие же это, какое нахрен троеточие 😤
@zproger
@zproger Жыл бұрын
Шеститочие 😁
@Sadownick
@Sadownick Жыл бұрын
😄 блин, в комментарии своём слово «позор» не его писал, только сейчас увидел 🤦🏻‍♂️, должно было быть «просто»
@TheTimeEntertainment
@TheTimeEntertainment Жыл бұрын
ВАУ лист в сет. ВОТ БЫ УЖ НИКОГДА НЕ ПОДУМАЛ. ВАУ ЛЯМБДА. А расскажите про цикл while или f stings или про чтение из файла. Я думаю мало кто об этом знает. (если что - это все жирный сарказм)
@user-kx7ch1zr3q
@user-kx7ch1zr3q Жыл бұрын
Простое лучше сложного, явное лучше неявного, бла бла бла, кококо, а код посмотришь - люди соревнуются как больше кода в строку засунуть, perl косплеят.
__new__ или __init__ в Python? Знаете ли вы это..
12:37
Шокирующая Речь Выпускника 😳📽️@CarrolltonTexas
00:43
Глеб Рандалайнен
Рет қаралды 11 МЛН
Чай будешь? #чайбудешь
00:14
ПАРОДИИ НА ИЗВЕСТНЫЕ ТРЕКИ
Рет қаралды 2,8 МЛН
Заметили?
00:11
Double Bubble
Рет қаралды 3,5 МЛН
ТОП 8 Редких и Удобных фишек в Python
10:57
ZProger [ IT ]
Рет қаралды 27 М.
Python OOP getters setters, decorator property, classmethod, staticmethod
22:40
Python + PyQt5 + PostgreSQL (часть 1)
25:25
Перлины: Владислав и Елена
Рет қаралды 13 М.
10 признаков того, что вы новичок в Python
4:59
Шокирующая Речь Выпускника 😳📽️@CarrolltonTexas
00:43
Глеб Рандалайнен
Рет қаралды 11 МЛН