Частые ошибки начинающих питонистов
HTML-код
- Опубликовано: 27 сен 2024
- В видео я показал те ошибки, которые попадаются мне наиболее часто у начинающих. Речь только о ошибках связанных с конструкциями языка, его синтаксисом, которые вижу регулярно.
PEP-8 www.python.org...
стандартные функции docs.python.or...
Именование! Называем вещи своими именами, коллекции во множественном числе, функции -что делают
Всегда используем ф-строки, НИКОГДА не складываем строки
не делаем то, что происходит по-умолчанию (str(input))
используем листкомпс и генэксп только если есть преобразование И/ИЛИ фильтрация
лучше листкомпс, генэксп, чем map/filter
используем while True для вечных циклов
если список не нужен, используем генэксп
не используем range (len(list)), если нужен индекс то используем enumerate
используем if collection чтобы проверить что не пустая
используем встроенные функции
ловим конкретное исключение, пишем информацию в ветке except
В видео отражено мое мнение, у вас может быть противоположное
Присоединяйся к помощи каналу, будет интересно)
✔️Бусти boosty.to/pyth...
✔️Юмани 410011506612886
Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
#Python #PythonRussian #PyCharm
наткнулся на канал случайно несколько дней назад. Никогда не встречал чтобы настолько доходчиво доносили информацию, видео взахлеб залетают. Спасибо дружище👍
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 замалчивание ошибки и неиспользование конкретного исключения
очень недооцененный контент, автор дает отличные знания и я вообще счастлив что наткнулся на его канал. Так качественно и понятно подавать знания это надо уметь, второй такой человек на мой взгляд это Тимофей Хирьянов
спасибо за отзыв. В ваших силах помочь - порекомендовать друзьям, поделиться в соцсетях
Супер-бомба, больше видео!
спасибо, очень полезно! про f строки у меня не было ясности, какой именно вариант использовать, сейчас понятно что просто пишем все на них
у меня есть отдельно видео по ф-строкам, посмотри тоже ruclips.net/video/vbZTVaulTdk/видео.html
Спасибо! очень поззнавательно.
за 26:21 большое спасибо
на форуме решений теперь умничаю, но конечно со ссылкой сюды
ушла всё переписывать! :)
Нравится манера подачи материала, все последовательно и четко. Но "новичк*" всегда лишним кажется. Весь контент у вас основан на обучении и исправлении действий как для начинающих, так и отучении от устаревшего кодинга профессионала. Если опустить "встречал у новичков" на "встречал", то суть не изменится :-)
Возможно говорю это не зря, так как являясь подписчиком канала буду буду лучше воспринимать подачу, как и другие.
ну тут логика простая -я рассказываю как раз о том, что часто вижу, в том числе при код-ревью или на форуме. Просто не хочу брать темы с потолка и подумал, что скажем новичок более внимательно отнесется к тому, что показано в видео, если слышит что это частая ошибка/проблема и его тоже может коснуться, чем просто "давайте поговорим о декораторах". Но и вашу точку зрения понимаю, постараюсь избавиться от этого. Полагаю что те, кто посмотрел хоть сколько то видео на канале уже поймут, что речь пойдет о каких то важных вещах, в которых ошибаются программисты.
Хочется сказать про dict.get(key,None). Не знаю точно, откуда это пошло, но со своей стороны могу предположить, что это пишется как "напоминалка" другому программисту: мол, ты не забудь, что тут еще может быть None. Наверное, люди предполагают, что, если их get() вернет None, то другой человек может долго думать, а откуда этот None взялся. А так типа видно
Но еще раз, я не анализировал столько много кода новичков, как вы, так что только допускаю
Гуглил что делать когда у меня из mongoDb не вернулся узел, как проверить на none да ещё и что бы не писать if. Так вот какая то из вверхних ссылок подсказала что есть get и именно с none. при чём не пример, при этом ссылки на документацию небыло и упоминания что он не нужен тоже. А так как это работает и не сильно было запарно то я так и написал.
Насчёт лист компрехеншнс, делаю вообще так - [*range(10)]
блин, я вот вижу что твои ролики суперполезны... но освоить это всё сразу нереально)).. я просмотрю все твои видео и буду их по кругу гонять кжадый день перед сном и во время отдыха, чтобы пока практикую узнавать ситуации хотя бы.. ох
конечно не реально. Я хоть и автор но тоже советую идти постепенно, помни что многие вещи никак не понять если не прочувствовать написав код. То есть пишем много кода -это единственный способ научиться программировать! Ролики никуда не убегут =)
Спасибо
и вот этот list(map) постоянно я использую, ну теперь =) использовал =)
👍
Not bad, not bad
Так а в каких все же случаях map и filter будут понятнее?)
честно говоря, когда видео снимал , у меня был какой то хороший пример из практики наготове, но теперь не могу вспомнить контекст. Короче мап-фильтр хороши для тех кто пришел с других ЯП (где они есть), для любителей функциональной парадигмы, а также при работе с reduce и itertools (местами). Вот так еще можно написать кратко
>>> from operator import add
>>> map(add, list1, list2)
Конечно можно сделать генэксп с zip, но уже не так кратко.
@@PythonRussian спасибо. Не знал, что map умеет работать с множеством iterable сразу))
1 == 1, ыыыы =) прям как я
В - внезапность
не уловил...
Не ожиданно услышать вот.
А у меня в Python 3.10 не получается такого результата, как в вашем примере по правилу №5. У меня print((e ** 2 for e in range(10) if e % 2 == 0)) выводит: , а не [0, 4, 16, 36, 64]. Чтобы получить список нужно [ ] ставить. Это специфика данной версии Илия где-то ошибаюсь?
это вы где то ошибаетесь - с круглыми скобками это генэксп, что вам и пишет, если нужен результат, то или действительно формировать список или использовать распаковку в стиле print(*(e ** 2 for e in range(10) if e % 2 == 0)).
@@PythonRussian Понятно, спасибо. Я, собственно, так и думал. Просто я повторил запись, что была на экране (там звездочки не было после print: ...(*(e...) , и удивился, что такой вывод у вас дал именно результат, а не констатацию факта, что используется генэксп. :)).
Еще раз спасибо за ролики! Они действительно очень понятны и, что тоже немаловажно, хорошим русским языком озвучены.
недооцененный канал...а жаль...масса полезного...
Как вы относитесь к частому исползованию
if : break ?
Почему интересуюсь, потому что преподователь часто говорит что бы максимально избегать этой конструкции, но не объясняет толком почему, мол не понятно читающиму будет. А обратной связи с ним нэма, так как запись там...если честно, я как то подсел на этот break..., и потому задался вопросом у Вас
приведите пожалуйста пример, не совсем понимаю. Дело в том, что break это не пара для if, это оператор выхода из цикла. Видимо вы какие то условия проверяете в цикле. Если выложите какой-нибудь код на pastebin и ссылку сюда, то смогу сказать точнее. Пока вроде не вижу проблем
@@PythonRussian да да, в WHILE, что то я тупанул, не уточнив, а код как нибудь потом, а то чот я стесняюсь =)
@@PythonRussian pastebin.com/MEvikSWM
@@ВладимирГригорьевич-у2р я прошу прощения, мне почему то этот комментарий Ютуб не показал, потому не ответил, а сейчас уже не активна ссылка. Сможете еще раз выложить код?
@@PythonRussian страннол девки пляшут, я же выложил повторно, нет коммента, ютуб походу удалил....
1:49 скажите пожалуйста какая клавиша раставила пробелы тут и где можно найти список таких полезностей.
вот тут посмотри ruclips.net/video/Jmkep5EbQQY/видео.html
Ох, из учебников для новичков это все убрали бы)
Конкотенация быстрее форматирования примерно в 3 раза
А еще в блоке except лучше писать print(repr(e)) выведет еще и имя исключения
это вы как посчитали? с помощью timeit попробуйте конкатенацию трех строковых переменных, а потом формирование ф-строк с ними же. Форматирование быстрее. Плюс промежуточные объекты не создаются в памяти
@@PythonRussian только что попробовал. 10кк итераций с f-строками дают в среднем 2.3 сек
Конкотенация тех же переменных 1.8 сек
Тройной прирост у меня получался без определения переменных, в тупую готовые строки
@@kan4317 у меня питон 3.8, ф-строки на 10 миллионах повторов в среднем формируются за 143 наносекунды, конкатенация переменных 181 наносекунда. Да разница невелика но уж точно не в 3 раза в пользу одного варианта и плюс ф-строки побыстрее, поудобнее и поправильнее.
@@PythonRussian каюсь, поставил в неравные условия, при конкотенации не добавлял пробелы
Не знаю, откудa Вы это взяли: e**2 for e in range(10) if e%2==0, но на питоне 3.5.3 уже работает range(0,10,2)
ну это же просто пример, хотел показать когда и фильтруем и преобразовываем.
Спустя год плотного изучения питона пришел ко всему, что сказано в видео. Больше не понтуюсь колбасой с map и filter. С английским не очень, но под рукой переводчик 24/7, так что проблем с этим нет. Я стал думать о всех, кто будет читать мой код и стараюсь делать его понятным каждому
Спасибо
спасибо за видосы!! Очень в книгах не хватает бест практикс разделов
По последнему пункту можно ещё так:
try:
int('a')
except Exception as err:
print(f'{err}, {err.args}')
Если не знаешь, какие исключения выпадут, то таким образом их можно зафиксировать.
молодец! Закинул себе в избранное 👌
Отличная подача материала, почерпнул новый фишки для себя. Лайк однозначно!
Спасибо, отличный туториал!
Многие ошибки прямо сейчас совершаю и учусь дальше их делать(обучают в онлайн школе програмирования). Спасибо за информацию, просто чудом попал на ваш канал.
из С++ это пошло стр(инпут())
спасибо вам большое! реально просто не понимал почему это все пишут =) и главное когда спрашиваешь -молчат. Я уж думал это что-то из глубин нашей психологии, а оно вон как оказывается.
@@PythonRussian я не имел ввиду синтаксис, я имел ввиду как раз психологию) блоксхема рождённая в С++ она и тут работает)
@@PythonRussian во втором Пытхоне инпут пытался вычислить вводимое выражение. Там еще был рав_инпут , но это не то же самое, что стр(инпут())
@@warpingdrum3712 вы кажется правы, но это ж с каких старых туториалов значит код списывают