Частые ошибки начинающих питонистов

Sdílet
Vložit
  • čas přidán 17. 01. 2021
  • В видео я показал те ошибки, которые попадаются мне наиболее часто у начинающих. Речь только о ошибках связанных с конструкциями языка, его синтаксисом, которые вижу регулярно.
    PEP-8 www.python.org/dev/peps/pep-0...
    стандартные функции docs.python.org/3.8/library/f...
    Именование! Называем вещи своими именами, коллекции во множественном числе, функции -что делают
    Всегда используем ф-строки, НИКОГДА не складываем строки
    не делаем то, что происходит по-умолчанию (str(input))
    используем листкомпс и генэксп только если есть преобразование И/ИЛИ фильтрация
    лучше листкомпс, генэксп, чем map/filter
    используем while True для вечных циклов
    если список не нужен, используем генэксп
    не используем range (len(list)), если нужен индекс то используем enumerate
    используем if collection чтобы проверить что не пустая
    используем встроенные функции
    ловим конкретное исключение, пишем информацию в ветке except
    В видео отражено мое мнение, у вас может быть противоположное
    Присоединяйся к помощи каналу, будет интересно)
    ✔️Бусти boosty.to/python_russian/donate
    ✔️Юмани 410011506612886
    Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
    #Python #PythonRussian #PyCharm

Komentáře • 67

  • @George-eb3bw
    @George-eb3bw Před 2 lety +17

    00:00 непонятные названия переменных
    10:31 использование контактенации
    13:05 усложнение кода тем, что и так произойдет по умолчанию #пример: (str(input())
    16:25 использование list compr вместо range
    19:15 использование функций map, filter, reduce вместо list compr
    23:25 использования вместо while True других конструкций для вечного цикла
    23:40 использование квадратных скобок для list compr без необходимости
    29:30 использование индексов в цикле for #пример: for i in range(len(list))
    33:30 использование функции len при проверке наличия элементов в коллекции
    35:30 использование флага в цикле без необходимости
    37:50 в блоке except замалчивание ошибки и неиспользование конкретного исключения

  • @lichrave6805
    @lichrave6805 Před 3 měsíci

    Многие ошибки прямо сейчас совершаю и учусь дальше их делать(обучают в онлайн школе програмирования). Спасибо за информацию, просто чудом попал на ваш канал.

  • @IlyaIlya_lopkop
    @IlyaIlya_lopkop Před 3 lety +5

    Супер-бомба, больше видео!

  • @Pumba053
    @Pumba053 Před 3 lety +2

    Спасибо, отличный туториал!

  • @user-kw9gx6dd2x
    @user-kw9gx6dd2x Před 2 lety +2

    Отличная подача материала, почерпнул новый фишки для себя. Лайк однозначно!

  • @y18kotov
    @y18kotov Před rokem +2

    Спасибо! очень поззнавательно.

  • @Laserball74
    @Laserball74 Před rokem +2

    молодец! Закинул себе в избранное 👌

  • @Insidepointg
    @Insidepointg Před rokem +1

    очень недооцененный контент, автор дает отличные знания и я вообще счастлив что наткнулся на его канал. Так качественно и понятно подавать знания это надо уметь, второй такой человек на мой взгляд это Тимофей Хирьянов

    • @PythonRussian
      @PythonRussian  Před rokem +1

      спасибо за отзыв. В ваших силах помочь - порекомендовать друзьям, поделиться в соцсетях

  • @mm_dima
    @mm_dima Před 7 měsíci +1

    Насчёт лист компрехеншнс, делаю вообще так - [*range(10)]

  • @barma1309
    @barma1309 Před rokem +2

    спасибо за видосы!! Очень в книгах не хватает бест практикс разделов

  • @mrmedbedb1256
    @mrmedbedb1256 Před 2 lety +2

    По последнему пункту можно ещё так:
    try:
    int('a')
    except Exception as err:
    print(f'{err}, {err.args}')
    Если не знаешь, какие исключения выпадут, то таким образом их можно зафиксировать.

  • @artemlavrinovich9174
    @artemlavrinovich9174 Před 3 lety +3

    спасибо, очень полезно! про f строки у меня не было ясности, какой именно вариант использовать, сейчас понятно что просто пишем все на них

    • @PythonRussian
      @PythonRussian  Před 3 lety +3

      у меня есть отдельно видео по ф-строкам, посмотри тоже czcams.com/video/vbZTVaulTdk/video.html

  • @sinrew2073
    @sinrew2073 Před 3 lety

    Спасибо

  • @user-do4nq3fr6t
    @user-do4nq3fr6t Před 3 lety +1

    на форуме решений теперь умничаю, но конечно со ссылкой сюды

  • @user-do4nq3fr6t
    @user-do4nq3fr6t Před 3 lety +3

    за 26:21 большое спасибо

  • @user-do4nq3fr6t
    @user-do4nq3fr6t Před 3 lety

    и вот этот list(map) постоянно я использую, ну теперь =) использовал =)

  • @polunochNY
    @polunochNY Před 3 lety +1

    ушла всё переписывать! :)

  • @rpuropu
    @rpuropu Před 3 lety +2

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

    • @PythonRussian
      @PythonRussian  Před 3 lety +4

      конечно не реально. Я хоть и автор но тоже советую идти постепенно, помни что многие вещи никак не понять если не прочувствовать написав код. То есть пишем много кода -это единственный способ научиться программировать! Ролики никуда не убегут =)

  • @frekbysib
    @frekbysib Před 3 lety +7

    Нравится манера подачи материала, все последовательно и четко. Но "новичк*" всегда лишним кажется. Весь контент у вас основан на обучении и исправлении действий как для начинающих, так и отучении от устаревшего кодинга профессионала. Если опустить "встречал у новичков" на "встречал", то суть не изменится :-)
    Возможно говорю это не зря, так как являясь подписчиком канала буду буду лучше воспринимать подачу, как и другие.

    • @PythonRussian
      @PythonRussian  Před 3 lety +2

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

  • @andrewpuchinin8547
    @andrewpuchinin8547 Před rokem +2

    Хочется сказать про dict.get(key,None). Не знаю точно, откуда это пошло, но со своей стороны могу предположить, что это пишется как "напоминалка" другому программисту: мол, ты не забудь, что тут еще может быть None. Наверное, люди предполагают, что, если их get() вернет None, то другой человек может долго думать, а откуда этот None взялся. А так типа видно
    Но еще раз, я не анализировал столько много кода новичков, как вы, так что только допускаю

    • @user-dk3ms4yt7x
      @user-dk3ms4yt7x Před rokem

      Гуглил что делать когда у меня из mongoDb не вернулся узел, как проверить на none да ещё и что бы не писать if. Так вот какая то из вверхних ссылок подсказала что есть get и именно с none. при чём не пример, при этом ссылки на документацию небыло и упоминания что он не нужен тоже. А так как это работает и не сильно было запарно то я так и написал.

  • @user-dn8bb3ii9d
    @user-dn8bb3ii9d Před 2 lety

    👍

  • @Nikola_Kreslo
    @Nikola_Kreslo Před 3 lety

    Not bad, not bad

  • @bbty_4086
    @bbty_4086 Před 2 lety

    1:49 скажите пожалуйста какая клавиша раставила пробелы тут и где можно найти список таких полезностей.

    • @PythonRussian
      @PythonRussian  Před 2 lety +1

      вот тут посмотри czcams.com/video/Jmkep5EbQQY/video.html

  • @user-do4nq3fr6t
    @user-do4nq3fr6t Před 3 lety +1

    Как вы относитесь к частому исползованию
    if : break ?
    Почему интересуюсь, потому что преподователь часто говорит что бы максимально избегать этой конструкции, но не объясняет толком почему, мол не понятно читающиму будет. А обратной связи с ним нэма, так как запись там...если честно, я как то подсел на этот break..., и потому задался вопросом у Вас

    • @PythonRussian
      @PythonRussian  Před 3 lety +1

      приведите пожалуйста пример, не совсем понимаю. Дело в том, что break это не пара для if, это оператор выхода из цикла. Видимо вы какие то условия проверяете в цикле. Если выложите какой-нибудь код на pastebin и ссылку сюда, то смогу сказать точнее. Пока вроде не вижу проблем

    • @user-do4nq3fr6t
      @user-do4nq3fr6t Před 3 lety +2

      @@PythonRussian да да, в WHILE, что то я тупанул, не уточнив, а код как нибудь потом, а то чот я стесняюсь =)

    • @user-do4nq3fr6t
      @user-do4nq3fr6t Před 3 lety

      @@PythonRussian pastebin.com/MEvikSWM

    • @PythonRussian
      @PythonRussian  Před 3 lety +1

      @@user-do4nq3fr6t я прошу прощения, мне почему то этот комментарий Ютуб не показал, потому не ответил, а сейчас уже не активна ссылка. Сможете еще раз выложить код?

    • @user-do4nq3fr6t
      @user-do4nq3fr6t Před 3 lety +1

      @@PythonRussian страннол девки пляшут, я же выложил повторно, нет коммента, ютуб походу удалил....

  • @user-do4nq3fr6t
    @user-do4nq3fr6t Před 3 lety +1

    1 == 1, ыыыы =) прям как я

  • @user-gp6vm4jc9p
    @user-gp6vm4jc9p Před 2 lety +1

    А у меня в Python 3.10 не получается такого результата, как в вашем примере по правилу №5. У меня print((e ** 2 for e in range(10) if e % 2 == 0)) выводит: , а не [0, 4, 16, 36, 64]. Чтобы получить список нужно [ ] ставить. Это специфика данной версии Илия где-то ошибаюсь?

    • @PythonRussian
      @PythonRussian  Před 2 lety

      это вы где то ошибаетесь - с круглыми скобками это генэксп, что вам и пишет, если нужен результат, то или действительно формировать список или использовать распаковку в стиле print(*(e ** 2 for e in range(10) if e % 2 == 0)).

    • @user-gp6vm4jc9p
      @user-gp6vm4jc9p Před 2 lety

      @@PythonRussian Понятно, спасибо. Я, собственно, так и думал. Просто я повторил запись, что была на экране (там звездочки не было после print: ...(*(e...) , и удивился, что такой вывод у вас дал именно результат, а не констатацию факта, что используется генэксп. :)).
      Еще раз спасибо за ролики! Они действительно очень понятны и, что тоже немаловажно, хорошим русским языком озвучены.

  • @user-re1ri9jp3e
    @user-re1ri9jp3e Před 2 lety

    В - внезапность

  • @SemyonKalyakulin
    @SemyonKalyakulin Před rokem +1

    Так а в каких все же случаях map и filter будут понятнее?)

    • @PythonRussian
      @PythonRussian  Před rokem +1

      честно говоря, когда видео снимал , у меня был какой то хороший пример из практики наготове, но теперь не могу вспомнить контекст. Короче мап-фильтр хороши для тех кто пришел с других ЯП (где они есть), для любителей функциональной парадигмы, а также при работе с reduce и itertools (местами). Вот так еще можно написать кратко
      >>> from operator import add
      >>> map(add, list1, list2)
      Конечно можно сделать генэксп с zip, но уже не так кратко.

    • @SemyonKalyakulin
      @SemyonKalyakulin Před rokem

      @@PythonRussian спасибо. Не знал, что map умеет работать с множеством iterable сразу))

  • @kan4317
    @kan4317 Před 3 lety

    Конкотенация быстрее форматирования примерно в 3 раза
    А еще в блоке except лучше писать print(repr(e)) выведет еще и имя исключения

    • @PythonRussian
      @PythonRussian  Před 3 lety

      это вы как посчитали? с помощью timeit попробуйте конкатенацию трех строковых переменных, а потом формирование ф-строк с ними же. Форматирование быстрее. Плюс промежуточные объекты не создаются в памяти

    • @kan4317
      @kan4317 Před 3 lety

      @@PythonRussian только что попробовал. 10кк итераций с f-строками дают в среднем 2.3 сек
      Конкотенация тех же переменных 1.8 сек

    • @kan4317
      @kan4317 Před 3 lety

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

    • @PythonRussian
      @PythonRussian  Před 3 lety +1

      @@kan4317 у меня питон 3.8, ф-строки на 10 миллионах повторов в среднем формируются за 143 наносекунды, конкатенация переменных 181 наносекунда. Да разница невелика но уж точно не в 3 раза в пользу одного варианта и плюс ф-строки побыстрее, поудобнее и поправильнее.

    • @kan4317
      @kan4317 Před 3 lety +1

      @@PythonRussian каюсь, поставил в неравные условия, при конкотенации не добавлял пробелы

  • @sagenovalstybes706
    @sagenovalstybes706 Před 2 lety +1

    Не знаю, откудa Вы это взяли: e**2 for e in range(10) if e%2==0, но на питоне 3.5.3 уже работает range(0,10,2)

    • @PythonRussian
      @PythonRussian  Před 2 lety

      ну это же просто пример, хотел показать когда и фильтруем и преобразовываем.

  • @rpuropu
    @rpuropu Před 3 lety

    из С++ это пошло стр(инпут())

    • @PythonRussian
      @PythonRussian  Před 3 lety +2

      спасибо вам большое! реально просто не понимал почему это все пишут =) и главное когда спрашиваешь -молчат. Я уж думал это что-то из глубин нашей психологии, а оно вон как оказывается.

    • @rpuropu
      @rpuropu Před 3 lety

      @@PythonRussian я не имел ввиду синтаксис, я имел ввиду как раз психологию) блоксхема рождённая в С++ она и тут работает)

    • @warpingdrum3712
      @warpingdrum3712 Před 2 měsíci

      @@PythonRussian во втором Пытхоне инпут пытался вычислить вводимое выражение. Там еще был рав_инпут , но это не то же самое, что стр(инпут())

    • @PythonRussian
      @PythonRussian  Před 2 měsíci

      @@warpingdrum3712 вы кажется правы, но это ж с каких старых туториалов значит код списывают

  • @user-sq1fe3ku5m
    @user-sq1fe3ku5m Před rokem

    недооцененный канал...а жаль...масса полезного...

  • @user-hw2yg2tt2u
    @user-hw2yg2tt2u Před 9 měsíci +1

    Ох, из учебников для новичков это все убрали бы)

  • @edgull_tlt
    @edgull_tlt Před 3 lety

    Спасибо