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

Поділитися
Вставка
  • Опубліковано 27 вер 2024

КОМЕНТАРІ • 121

  • @predatel_rodini
    @predatel_rodini 2 роки тому +11

    А ещё если написать 1 + 2 то получится 3. Эб этой фишке python многие не знают.

  • @jurissiberian7568
    @jurissiberian7568 2 роки тому +23

    Уточнение. Функция в пайтон возвращает только одно значение, в примере на видео - кортеж. Да, кортеж может содержать кучу данных, но возвращаемый из функции кортеж - это одно значение. При использовании type hinting (def func() -> tuple:) это становится более очевидным. По-моему, только Golang может возвращать несколько значений.

    • @АртёмЗагурский-ь4ш
      @АртёмЗагурский-ь4ш 2 роки тому +3

      Ура, мне не придётся это писать)
      Спасибо что уже сделал это

    • @endlessvd
      @endlessvd 2 роки тому +1

      А на C++ функции через ссылки и указатели могут возвращать сколь угодно много значений, лол

    • @dann1kid
      @dann1kid 2 роки тому

      может, через запятую несколько значений, для приема которы требуется несколько переменных

    • @animatea8602
      @animatea8602 Рік тому +2

      @@dann1kid и это всё равно будет кортеж

  • @kodeng6333
    @kodeng6333 2 роки тому +6

    1) NotImplemented в идеале заменить NotImplemented Error и выкидывать как исключение, а не возвращать (raise NotImplementedError), при вызове будет исключение, а не unexpected-behavior.
    2) Анонимные функции не стоит использовать часто, в основном используется в map / filter / reduce (Пример: map(lambda x: x ** 2, [1, 2, 3, 4]))

    • @renat9933
      @renat9933 2 роки тому

      анонимные функции прекрасно прокидываютая в колбеки вообщем сахарит код
      злоупотребление конечно зло(мапы и генераторы в 2 экрана длиной видали:))

    • @anndreiko
      @anndreiko 7 місяців тому

      ​@@renat9933а можно по джунски пожалуйста?😁

  • @vlatterran
    @vlatterran 2 роки тому +1

    Я, когда кто-то сохраняет лямбду в переменую: чел, ты...
    На счёт декораторов: я осмелюсь предположить, что если ты не знаешь про них, то либо ты не разработчик на питоне, а используешь его как побочный инструмент, либо ты совсем новичок
    Когда возвращаешь много значений из функции, нв самом деле ты возвращаешь кортеж из этих значений
    Про *args и **kwargs стоило упомянуть, что это в основном для лекораторов, где сигнатуры подменяются. А то налепят своих кваргов, пойди потом разбери что и как в функцию передать надо. Ну и чисто как по мне - вариант произношения ки варгс странное, либо кварги/кваргс, либо уж полностью keyword arg(ument)s

  • @TS666
    @TS666 6 місяців тому

    5:45 - list(range(20)) выполняется быстрее [x for x in range(20)], а результат один и тот же.

  • @Рибус
    @Рибус 2 роки тому +1

    Простые полезные штуки.
    Про элипсис только не сказал, что он используется для отображения бесконечно вложенной рекурсии.
    in_me = [1]
    in_me.append(in_me)
    print(in_me)
    # [1, [... ]]

  • @tuesok6462
    @tuesok6462 2 роки тому +2

    Лайк поставил, жду следующего видео)

  • @mrdixioner
    @mrdixioner 4 місяці тому

    Спасибо огромное!!!

  • @danielleroy3822
    @danielleroy3822 2 роки тому +2

    Гераторы и списковые включения не одно и то же.
    Генератор возвращает итерируемый обьект, в то время как list comprehensions возвращает список.
    Вообще списковые включения это очень приятный синтаксический сахар. А у генераторов есть цель: экономить затраты по ОЗУ.

    • @zproger
      @zproger  2 роки тому +1

      Согласен, это разные вещи. Я подразумеваю генератор как "генератор значений", а не технологию из Python

  • @andrewbobrow3815
    @andrewbobrow3815 Рік тому

    Фокус с преобразованием списка в множество для удаления дубликатов содержит маленькую засаду - множество не гарантирует упорядоченность элементов, а вдруг для вас порядок элементов в исходном списке имеет значение даже при удаленных дубликатах

  • @mifonix88
    @mifonix88 Рік тому

    Любли подобные конструкции [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. Ибо читается код чаще чем пишится.

  • @seoonlyRU
    @seoonlyRU 2 роки тому +1

    Спасибо, и правда отлично! Лайк от СЕООНЛИ

  • @AlexandrSpirit
    @AlexandrSpirit Рік тому +1

    анонимные функции решают проблему с блокировками при асинхронной работе

  • @rolandwalker4434
    @rolandwalker4434 Рік тому +1

    На счёт дата класса, ещё есть именнованый картеж, тоже классная штука

  • @dary508
    @dary508 2 роки тому +2

    Ку, что за редактор ты используешь??? Красивый

  • @ИванГолышев-с6д
    @ИванГолышев-с6д 2 роки тому +3

    Боже, как всегда лучший!

    • @zproger
      @zproger  2 роки тому

      😉

    • @ИванГолышев-с6д
      @ИванГолышев-с6д 2 роки тому

      @@zproger Подскажи, пожалуйста, в связи с тем что Heroku прекратил работу на территории РФ, какой бы ты ещё сервер для телеграмм ботов мог бы посоветовать?

  • @rasrabotchik
    @rasrabotchik 2 роки тому +2

    Один из лучших!!!

    • @zproger
      @zproger  2 роки тому

      Благодарю!

  • @lolbefree
    @lolbefree 2 роки тому +3

    я сегодня узнал что анонимные функции так использовать нельзя "PEP 8: E731 do not assign a lambda expression, use a def" Нужно обьявлять функцию вместо переменной

    • @brothersstudio3566
      @brothersstudio3566 2 роки тому +1

      потому что лямбда нужна там, где требуется обьект функции и с не очень большим функционалом, в остальном же лучше использоваться обычную

    • @zproger
      @zproger  2 роки тому +1

      Неплохо =)

    • @lolbefree
      @lolbefree 2 роки тому +1

      @@brothersstudio3566 не тут написано точно do not assign a lambda expression, use a def

  • @Uniter_ua
    @Uniter_ua Рік тому +1

    Спасіба за відео.

    • @zproger
      @zproger  Рік тому

      Рад что понравилось

  • @mylife-ej8et
    @mylife-ej8et 2 роки тому +16

    Я год учусь, усердно и о всём этом знаю, контент хороший продолжать в том же духе

    • @zproger
      @zproger  2 роки тому +1

      Так держать =)

    • @metasy_
      @metasy_ 2 роки тому +1

      ну, это круто что ты все это узнал всего за год

    • @vangog8595
      @vangog8595 2 роки тому

      харош, удачи

  • @lapki322-
    @lapki322- Рік тому +8

    Эммм, называть list comprehension генератором - это жесть и полная дичь. И оправдываться, что мне так удобно говорить еще большая дичь. Генератор выполнятся лениво, а comprehension сразу. Если поставить круглые скобки, да это будет генератор - но это не имеет никакого отношения к кортежам. Честно, совету автору повысить свою грамотность в питончеке в первую очередь, а потом уже вещать на широкую аудиторию.

  • @timofeytislenko3680
    @timofeytislenko3680 2 роки тому +1

    2 полезные фишки, но для новеньких (хз как назвать тех, кто даже до начинающих не дотягивает) я бы добавил контейнеры.

  • @gezginim_61
    @gezginim_61 2 роки тому +4

    Одно уточнение. Генераторов картежей в пайтоне не существует. В круглых скобках генерируются итераторы. Именно к ним мы можем применить метод next () ))...

    • @marcb5832
      @marcb5832 Рік тому

      Во-первых, кОртежей. Во-вторых, не итераторы, а генераторы, к ним и применяется метод next.

  • @Uniter_ua
    @Uniter_ua Рік тому +1

    Спасіба, elipsis я найшов шо ти робиш!

  • @jak4596
    @jak4596 Місяць тому

    Yield и from можно прикольно комбенировать

  • @mylife-ej8et
    @mylife-ej8et 2 роки тому +7

    Хочу вас попросить, а будет ли такая возможность сделать несколько видео про ассинхронный python

    • @zproger
      @zproger  2 роки тому +4

      Будет, обязательно сделаю видео =)

    • @mylife-ej8et
      @mylife-ej8et 2 роки тому

      @@zproger спасибо большое, ценю такой качественный контент, очень нравиться ваш подход к видео роликам, обязательно продолжайте в том же духе

  • @Alpha_Gamma_Beta
    @Alpha_Gamma_Beta Рік тому

    ооо...
    помню, в детстве была олимпиадная (паскаль) задачка. поменять две переменные местами, не использую третью.))
    а питон так просто может

  • @dodokwak
    @dodokwak 2 роки тому +3

    спс. большая часть знакома. просьба когда-нибудь включить кратко-тезисное разъяснение оператора & (который НЕ &&). thx ещё раз.

    • @zproger
      @zproger  2 роки тому +1

      Спасибо

  • @АндрейБогданов-е2ж
    @АндрейБогданов-е2ж 2 роки тому +4

    Не троеточие, а МНОГОТОЧИЕ!

  • @sovenok-hacker
    @sovenok-hacker 2 роки тому +3

    Про this я знаю.

  • @amletixq
    @amletixq 2 роки тому +4

    6:14 Можно еще заменить вторую запись этим: res2 = list(range(number))

  • @anonsd5521
    @anonsd5521 7 місяців тому

    Гугл перевод Зен Пайтона это нечто

  • @girfeo9338
    @girfeo9338 2 роки тому +4

    Спасибо за работу, лайк для продвига

    • @zproger
      @zproger  2 роки тому

      Благодарю

  • @IvanIvanov-dh3sg
    @IvanIvanov-dh3sg 2 роки тому +7

    Спасибо за отличное видео, автор вы молодец =)

    • @zproger
      @zproger  2 роки тому +2

      Благодарю!

  • @disadiuauiosdaiaudiossaais8862
    @disadiuauiosdaiaudiossaais8862 2 роки тому +1

    А где ты обрабатываешь видео?

  • @psevdonim753
    @psevdonim753 Рік тому

    Никто никогда не оскорблял слово ''this'' тем, что произносил его как ''зис'' 🤣🤣🤣🤣🤣🤣

  • @Galano-vx7xy
    @Galano-vx7xy 2 роки тому +2

    Привет,а что за линукс дистрибутив у тебя?)

  • @BigMemes-jd3tb
    @BigMemes-jd3tb Рік тому

    7:55 Я тебе щас руки оторву
    res2 = [x for x in range(0, 20, 2)]

  • @ИванТаранов-ч9п
    @ИванТаранов-ч9п 2 роки тому +3

    Супер! Спасибо.

  • @mainhero1264
    @mainhero1264 2 роки тому +3

    Спасибо за фичи🔥
    Какая у Вас тема в VsСode?

  • @ИннаЛиксакова-о4н

    18 фишек в пайтон, о которых ты знаешь, программируя на пайтон около 6 месяцев. Такие себе фишки. Рассказали бы например, что можно писать не только *args и **kwargs, а например *book **books, про метаклассы, про дескрипторы, вот это фишки, а так видео, ну для очень начинающих

  • @yawneed
    @yawneed 2 роки тому +2

    EBI RCI BUS

  • @tpsevandovski
    @tpsevandovski 11 місяців тому +1

    ... if ... else ... if ... else ...

  • @soohoy8256
    @soohoy8256 2 роки тому +2

    Я только учусь писать код, зачем я это смотрю?

    • @zproger
      @zproger  2 роки тому

      Чтобы сразу писать правильно =)

  • @robertobokarev439
    @robertobokarev439 2 роки тому +3

    Всё знаю из этого)
    Правда жалко, что Гвидо отказался делать лямбду многострочной, очн не хватает порой(((

    • @zproger
      @zproger  2 роки тому

      Было бы неплохо =)

    • @Рибус
      @Рибус 2 роки тому +1

      Нееет! Порой заворачивают такие однострочники с лямбдами, что хоть всех святых выноси. Разбираешься в этом нагромождении столько же, сколько в сотне строк. Дай им многострочные лямбды, и код уже никто не сможет поддерживать

    • @metasy_
      @metasy_ 2 роки тому

      ну можно конечно сговнокодить, но если взять тапл и перечислять строки для выполнения, то по сути будет ограниченная многострочность (можно вместо '=' использовать ':=')

    • @predatel_rodini
      @predatel_rodini 2 роки тому

      Def чем плох?

    • @Рибус
      @Рибус 2 роки тому

      @@predatel_rodini def всем хорош. Просто его нецелесообразно заводить, когда нужна однострочная функция, которая больше не будет использоваться в коде.

  • @Sadownick
    @Sadownick 2 роки тому +2

    Блин, ну все хорошо, но фраза «троеточие» ну ваще позор режет слух... многоточие, многоточие же это, какое нахрен троеточие 😤

    • @zproger
      @zproger  2 роки тому +2

      Шеститочие 😁

    • @Sadownick
      @Sadownick 2 роки тому +1

      😄 блин, в комментарии своём слово «позор» не его писал, только сейчас увидел 🤦🏻‍♂️, должно было быть «просто»

  • @b27etula82
    @b27etula82 Рік тому

    Многоточие, а не троеточие

  • @ЛштшфумАщвф
    @ЛштшфумАщвф Рік тому

    Простое лучше сложного, явное лучше неявного, бла бла бла, кококо, а код посмотришь - люди соревнуются как больше кода в строку засунуть, perl косплеят.

  • @TheTimeEntertainment
    @TheTimeEntertainment Рік тому

    ВАУ лист в сет. ВОТ БЫ УЖ НИКОГДА НЕ ПОДУМАЛ. ВАУ ЛЯМБДА.
    А расскажите про цикл while или f stings или про чтение из файла. Я думаю мало кто об этом знает.
    (если что - это все жирный сарказм)

  • @smitacer8938
    @smitacer8938 2 роки тому +17

    Добавил бы, что генераторы списка быстрей работают т.к. не выполняется .append.
    Присваивание lambda-функции, как по мне, противоречит самому её назначению "анонимной функции", и гораздо читаемо будет выглядеть обычный def.

    • @zproger
      @zproger  2 роки тому +1

      Спасибо за комментарий, он хорошо дополняет видео

  • @NikitaGriboedov
    @NikitaGriboedov 2 роки тому +2

    list comprehension - это не генераторы, а генераторы - это генераторы, это очень неправильное удобство

    • @zproger
      @zproger  2 роки тому +1

      Согласен, стараюсь от этой привычки избавится =)
      Но тут скорее генератор не в прямом смысле, а именно как технология которая генерирует значения

  • @SerhiiVielkin
    @SerhiiVielkin Рік тому +1

    Про елипсис не знал) Всегда пользовался pass

  • @MachtFeuer
    @MachtFeuer Рік тому +2

    Вам привет из Казахстана, начал смотреть Ваши видео - и учиться программированию :)

    • @zproger
      @zproger  Рік тому +1

      И вам привет =))

  • @даниилпавленко-ъ2з
    @даниилпавленко-ъ2з 2 роки тому +1

    Что интересно, Доусон об этом всём не пишет

    • @vangog8595
      @vangog8595 2 роки тому

      что за доусон

  • @АртёмЗагурский-ь4ш
    @АртёмЗагурский-ь4ш 2 роки тому +2

    С множествами можно показать ещё возможность создавать новое множество, в котором есть только те значения, которые есть в одном множестве, но нет в другом. Короче подобие битовой XOR операции.
    {1, 2, 3, 4, 5} ^ {3, 4, 5, 6} -> {1, 2, 6}
    Помогает когда есть два огромных списка(больше пары сотен значений например), которые должны быть одинаковыми, но по какой-то причине не одинаковы. Вот эти исключения этот приём помогает отыскать :)
    Очень специфическая штука, пригодится одному из сотни прочитавших, но писать свою реализацию такой операции занимает 10 минут. (У меня из-за невнимательности отняло 40-60)

  • @dmitriyneledva4693
    @dmitriyneledva4693 2 роки тому +1

    Круто, я не знал, что * и ** это про распаковку, не смотрел на это именно таким образом

  • @wavilen1
    @wavilen1 2 роки тому +15

    У вас программа вывода аудио - информации зациклена по 3 - 4 раза, повторяете 1 и тоже. Выходите вовремя из цикла. Или не пользуйтесь ВАЙЛ.

  • @Артурчик-з4ф
    @Артурчик-з4ф 11 місяців тому

    А можно каждого слово было повторить не 30 а 1000 раз к примеру? Пришлось ставить скорость 1,5 чтобы как то усвоить смысл .

  • @--wat--
    @--wat-- Рік тому

    6:29 можно использовать range(x)

  • @chuuhan1
    @chuuhan1 2 роки тому +2

    Спасибо

  • @ВладСкопен
    @ВладСкопен 2 місяці тому

    Про датаклассы было полезно

  • @orkooshov
    @orkooshov 2 роки тому +2

    А еще из интересного, в Python 3.8 добавили оператор :=
    Пример:
    x = 4
    if (y := x) == 4:
    print(x, y) #output: 4, 4

    • @orkooshov
      @orkooshov 2 роки тому

      Еще pattern matching - интересная тема. Добавлен в Python 3.10

    • @zproger
      @zproger  2 роки тому +1

      Да, об этих темах есть видео на канале:
      ua-cam.com/video/ZBv-G4vxxyc/v-deo.html
      ua-cam.com/video/jIFeDDf69Uk/v-deo.html

  • @ko-prometheus
    @ko-prometheus Рік тому

    ☯☯☯☯☯

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 2 роки тому +1

    Благодарю! 🔥

  • @clqwnlesslxrd
    @clqwnlesslxrd Рік тому

    Благодарю за фишки!

  • @topdich6181
    @topdich6181 2 роки тому +1

    С последним советом нужно быть очень аккуратным, т.к. при преобразовании списка во множество автоматически происходит его сортировка.
    Т.е. при выполнении команды list(set([3, 2, 1])) получим список [1, 2, 3]

    • @sashaklymyk4870
      @sashaklymyk4870 2 роки тому

      В множествах (set) элементы не сортируются, они вообще не упорядочены, у них нет индекса. Попробуй заполнить set строками и вызвать print несколько раз, тогда каждый раз элементы множества будут в разном порядке
      Например:
      set('1', '2', '3')
      print(set)
      1 2 3
      2 3 1
      3 1 2
      и т.д