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

Поделиться
HTML-код
  • Опубликовано: 17 янв 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

Комментарии • 67

  • @George-eb3bw
    @George-eb3bw 2 года назад +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 2 месяца назад

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

  • @IlyaIlya_lopkop
    @IlyaIlya_lopkop 3 года назад +5

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

  • @mm_dima
    @mm_dima 7 месяцев назад +1

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

  • @Laserball74
    @Laserball74 Год назад +2

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

  • @Insidepointg
    @Insidepointg Год назад +1

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

    • @PythonRussian
      @PythonRussian  Год назад +1

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

  • @Pumba053
    @Pumba053 3 года назад +2

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

  • @y18kotov
    @y18kotov Год назад +2

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

  • @user-kw9gx6dd2x
    @user-kw9gx6dd2x 2 года назад +2

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

  • @barma1309
    @barma1309 Год назад +2

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

  • @mrmedbedb1256
    @mrmedbedb1256 2 года назад +2

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

  • @user-do4nq3fr6t
    @user-do4nq3fr6t 3 года назад +3

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

  • @user-do4nq3fr6t
    @user-do4nq3fr6t 3 года назад +1

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

  • @edgull_tlt
    @edgull_tlt 3 года назад

    Спасибо

  • @artemlavrinovich9174
    @artemlavrinovich9174 3 года назад +3

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

    • @PythonRussian
      @PythonRussian  3 года назад +3

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

  • @polunochNY
    @polunochNY 3 года назад +1

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

  • @user-do4nq3fr6t
    @user-do4nq3fr6t 3 года назад

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

  • @frekbysib
    @frekbysib 3 года назад +7

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

    • @PythonRussian
      @PythonRussian  3 года назад +2

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

  • @user-dn8bb3ii9d
    @user-dn8bb3ii9d 2 года назад

    👍

  • @andrewpuchinin8547
    @andrewpuchinin8547 Год назад +2

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

    • @user-dk3ms4yt7x
      @user-dk3ms4yt7x Год назад

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

  • @rpuropu
    @rpuropu 3 года назад +2

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

    • @PythonRussian
      @PythonRussian  3 года назад +4

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

  • @Nikola_Kreslo
    @Nikola_Kreslo 3 года назад

    Not bad, not bad

  • @bbty_4086
    @bbty_4086 2 года назад

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

    • @PythonRussian
      @PythonRussian  2 года назад +1

      вот тут посмотри ruclips.net/video/Jmkep5EbQQY/видео.html

  • @user-do4nq3fr6t
    @user-do4nq3fr6t 3 года назад +1

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

  • @user-gp6vm4jc9p
    @user-gp6vm4jc9p 2 года назад +1

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

    • @PythonRussian
      @PythonRussian  2 года назад

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

    • @user-gp6vm4jc9p
      @user-gp6vm4jc9p 2 года назад

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

  • @user-do4nq3fr6t
    @user-do4nq3fr6t 3 года назад +1

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

    • @PythonRussian
      @PythonRussian  3 года назад +1

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

    • @user-do4nq3fr6t
      @user-do4nq3fr6t 3 года назад +2

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

    • @user-do4nq3fr6t
      @user-do4nq3fr6t 3 года назад

      @@PythonRussian pastebin.com/MEvikSWM

    • @PythonRussian
      @PythonRussian  3 года назад +1

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

    • @user-do4nq3fr6t
      @user-do4nq3fr6t 3 года назад +1

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

  • @SemyonKalyakulin
    @SemyonKalyakulin Год назад +1

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

    • @PythonRussian
      @PythonRussian  Год назад +1

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

    • @SemyonKalyakulin
      @SemyonKalyakulin Год назад

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

  • @user-re1ri9jp3e
    @user-re1ri9jp3e 2 года назад

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

  • @user-sq1fe3ku5m
    @user-sq1fe3ku5m Год назад

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

  • @kan4317
    @kan4317 3 года назад

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

    • @PythonRussian
      @PythonRussian  3 года назад

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

    • @kan4317
      @kan4317 3 года назад

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

    • @kan4317
      @kan4317 3 года назад

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

    • @PythonRussian
      @PythonRussian  3 года назад +1

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

    • @kan4317
      @kan4317 3 года назад +1

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

  • @user-hw2yg2tt2u
    @user-hw2yg2tt2u 8 месяцев назад +1

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

  • @sagenovalstybes706
    @sagenovalstybes706 2 года назад +1

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

    • @PythonRussian
      @PythonRussian  2 года назад

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

  • @rpuropu
    @rpuropu 3 года назад

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

    • @PythonRussian
      @PythonRussian  3 года назад +2

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

    • @rpuropu
      @rpuropu 3 года назад

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

    • @warpingdrum3712
      @warpingdrum3712 2 месяца назад

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

    • @PythonRussian
      @PythonRussian  2 месяца назад

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

  • @sinrew2073
    @sinrew2073 3 года назад

    Спасибо