ТОП 5 Ошибок в написании функций Python

  Переглядів 75,469

ZProger [ IT ]

ZProger [ IT ]

Рік тому

⭐ Курс ООП и Приват канал: www.zproger-school.com/?...
⭐ Телеграм канал: t.me/+zS0X6UO25MI4ZGYx
В данном видео рассмотрим самые популярные ошибки при написании функций в Python. Если вы часто допускаете эти ошибки, то это может повлиять на структуру вашего кода, на легкость его поддержки и также может забрать у вас много времени при попытке что-то исправить.
Исправление этих ошибок в вашем Python коде, поможет в разы улучшить ваши проекты и легкость их поддержки.
📁 Github: github.com/Zproger
📁 Все плейлисты с уроками: bit.ly/39GaY89
📁 Связаться со мной: zproger777@gmail.com
📁 Все плейлисты с уроками: bit.ly/39GaY89
📁 Поддержать криптовалютой: github.com/Zproger/donate

КОМЕНТАРІ: 156
@MEZHGANO
@MEZHGANO Рік тому
Все по делу, спасибо. Если вдруг кто не в курсе, то комментарий к функции лучше писать в тройных кавычках в теле функции, тогда он появится в подсказке при наведении курсора на функцию
@zproger
@zproger Рік тому
Спасибо за дополнение к видео, это хороший совет
@dmitrykoklyagin2916
@dmitrykoklyagin2916 Рік тому
1. Думаем над именами функций и классов. Код пишется один раз, а читается постоянно. 2. Type annotations для функций и внимательно отслеживаем несоответствия по типам данных на уровне проекта. Очень много херни позволяет отловить с минимальной задержкой. 3. Докстринги, в которых описываемых всё, что функция принципиально делает. Комментарии - только там, где надо пояснить какое-то неочевидное решение, из-за, например, изврата бизнес-логики. 4. from xxx import * --- должен вообще не пройти код ревью коллег и не попасть в мастер. 5. В числе ревьюеров должен быть маньяк идеи чистого кода, нам повезло, у нас их два.
@zproger
@zproger Рік тому
Маньяки чистого кода это хорошо
@dann1kid
@dann1kid Рік тому
Со всеми пунктами согласен
@ThembaKai
@ThembaKai Місяць тому
несколько курсов на степике прошел по питону, видел как люди писали в функциях аннотацию, но не понимал для чего конкретно это нужно, теперь разобрался; начал смотреть твой канал и ты мне очень помогаешь в понимании этого языка, спасибо тебе, твой канал один из лучших по питону!
@irwe3514
@irwe3514 Рік тому
Очень интересно и информативно, жду следущих видео)
@zproger
@zproger Рік тому
Благодарю :)
@MaxusR
@MaxusR Рік тому
Насчёт неочевидных имён функций согласен на все 200%, а вот насчёт требования к уникальности названий категорически против. Кто сделал import *, тот сам дурак. А если в двух разных модулях функции выполняют логически одно и то же, но по-разному, то почему-бы и не назвать их идентично.
@zener_blitz
@zener_blitz Рік тому
Так речь идёт не про разные модули, в разных модулях эти функции не будут пересекаться.
@aliakseybaradulkin2443
@aliakseybaradulkin2443 Рік тому
Я бы добавил еще про ОПП Мы должны использовать классы осознанно, не просто для того что б имена функций были более краткими и понятными, а с какой то целью например хранение состояния (это было сказано, но как дополнительный бонус) или возможности полиморфизма и прочие плюсы классов просто использовать функции что б сократить имена классов и тд - это не правильно
@SashaGun_GD
@SashaGun_GD Рік тому
import * нужен только в tkinter
@user-ow5iv1wo7j
@user-ow5iv1wo7j Рік тому
Спасибо за информативный и понятный контент)
@zproger
@zproger Рік тому
Рад что понравилось
@SYPERSTAR1986
@SYPERSTAR1986 Рік тому
Спасибо большое дружище, очень крутой и познавательный видос!!!
@zproger
@zproger Рік тому
Спасибо =)
@riventarakoss1546
@riventarakoss1546 Рік тому
Не понимаю, почему ролик выходит то для новичков, то для тех, кто уже смешарик. Это БАЗА
@zproger
@zproger Рік тому
Бывает =)
@bspumo3830
@bspumo3830 Рік тому
Лайк за смешариков 👍🏿
@savtis2606
@savtis2606 Рік тому
Базированный гигачад
@killuar0294
@killuar0294 11 місяців тому
Сколько часов в шарараме?
@frontend_developer_anti_vata
@frontend_developer_anti_vata 7 місяців тому
​@@killuar02948 лет умножить на 8760 часов = 70080
@user-ty1bc5zo3z
@user-ty1bc5zo3z Рік тому
Спасибо!Информативно и полезно!
@zproger
@zproger Рік тому
Благодарю
@eugenebybin6403
@eugenebybin6403 Рік тому
Спасибо за видео, структурированно и понятно
@zproger
@zproger Рік тому
Рад что понравилось
@romanbush5164
@romanbush5164 Рік тому
Молодец объяснил чистый код и принципы солид), а про scores это жесть, поэтому лучше писать в ооп стиле
@vasiliynet3425
@vasiliynet3425 Рік тому
В примере про скорс, с добавлением числа в массиву, меняется аргумент, чего в чистых функциях быть не должно, поэтому и возникло затруднение при вызовах. Должен был создаваться новый массив и возвращать результат. В JS это понимание очень часто играет.
@otetz77
@otetz77 Рік тому
Импорт через звездочку просто надо себе запретить. Оооочень много проблем снимает. А в удобстве почти не теряешь с современными редакторами.
@zproger
@zproger Рік тому
Согласен
@nartoomeon9378
@nartoomeon9378 8 місяців тому
Из последнего коротко: меньше кода, больше функционала.
@SolistTV
@SolistTV Рік тому
6:28 лишним плюсом реализации методов класса вместо функций будет полиморфизм, который станет, доступным для методов. Об уникальности методов нужно будет думать только в рамках класса, а не всей системы. К тому же, созданный класс задаст контекст использования методов, будет проще контролировать инпут/аутпут.
@MagMigo
@MagMigo Рік тому
Могу про лямбду добавить: есть вот люди, которые постоянно везде суют лямбду, т.е. x = lambda y: y ** 2 print(x(5)) Сделайте вид, что тут что-то сложное. И вот, часто замечал, что многие любят делать огромные строки, где тупа одна лямбда как какая-то функция Это нарушение PEP8 про длину строки и ещё одно нарушение, что лямбда используется неправильно (даже в пепе есть (!!)) Правильно лямбда используется в таких моментах: print(sorted(["c", "b", "a"], key=lambda x: x[0].lower())) # prints: ['a', 'b', 'c'] Это просто пример, но думаю суть ясна. Вооооооооооооооооот, да
@robertobokarev439
@robertobokarev439 Рік тому
3 совета очевидны (овер или недокоммент, нет аннотаций, плохое название функции). Как предложение, можно добавить объяснение поч плохо сохранять лямбды в переменные, использовать простые функции в абстракциях (для новичков может быть непонятно), почему перегрузка функций typing.overload с одним и тем же параметром с разным названием вне .pyi файла вообще нежелательно (Моё мнение).
@nickolayfetlistov4416
@nickolayfetlistov4416 Рік тому
За видео спасибо, уже так сказать опытная котлета но на одном из первых собесов с ссылочками на листочки поплыл) Полезно однако)
@zproger
@zproger Рік тому
Рад что помогло =))
@user-nu3ot7td1j
@user-nu3ot7td1j 7 місяців тому
Видео очень хорошее, но можно было бы сюда сразу теории докинуть, так как в видео упоминается, и про Single responsibility principle , и про DRY, и про KISS
@nikolaymatveychuk6145
@nikolaymatveychuk6145 Рік тому
Первая рекомендация про именование хорошая, хотя не нова (тут следует сослаться на того же Макконнелла с его книгой "Совершенный код"). Остальное - nah... Насчёт методов, которые предлагается в класс обернуть - там сразу value и values лишние, потому что не добавляют ничего к пониманию сути функций (понятное дело что речь про значения, а не неопределённости или незначимости). Да и вообще лучше указывать что на что делится, потому метод должен зваться так, чтобы код получился вроде с = a.divideBy(b), иначе будет не понятно то ли a на b делится, то ли наоборот. Да и попытка создать класс на пустом месте - плохая идея, иначе следовало бы отказаться от выражений вида a*b, a + b, a % b и так далее и всё следовало бы их писать как a.mod(b), a.multiplyBy(b), a.divideBy(b) и т.д.. Раз мы все так не делаем, то следует предположить, что идея плохая и классы придуманы для другого (а такое "нововведение" лишь без причины усложнит код). Насчёт передачи по ссылке параметра по-умолчанию - я бы это охарактеризовал как баг питона. Согласен, работая с питоном об этом следует знать и в этом плане респект автору (лично я на питоне не пишу, потому для меня это было открытием). Но это значит, что в питоне не скалярные параметры с заданным значением по-умолчанию использовать нельзя, потому что это по определению функция грязная, которая обязательно породит непредсказуемое поведение. Потому часть про "если вы знаете как, то можете это использовать" из разряда вредных советов.
@user-xl7hd4io9t
@user-xl7hd4io9t Рік тому
Можешь напомнить плз, какой дистрибут линукса ты юзаешь???
@zproger
@zproger Рік тому
ZorinOS
@shinkun4614
@shinkun4614 Рік тому
Хороший видосик)
@zproger
@zproger Рік тому
=)
@scrooge6603
@scrooge6603 Рік тому
Я тут в общем, пишу функцию и тут ты! Спасибо, обязательно посмотрю позже! Я проверяю инстансами, и зачастую люблю писать в одну строку так: ('True' if mesg == 'hi' else 'False'), [i for i in mesg....]
@MagMigo
@MagMigo Рік тому
Не пиши буль не булем True/False должны быть без "", а ещё у тебя здесь проблемы c алгебра-логикой и можно сделать просто return mesg == "hi"
@scrooge6603
@scrooge6603 Рік тому
@@MagMigo 1.С булами затупил немного когда писал это, а так, я делаю реальными булами без " " 2.Нет, у меня нет проблем с логикой, я не сказал ещё если в друг мне нужно по листу пройтись или написть что-то если Тру или Фолз Примерно так, выглядит моя функция: def hello(text): if not isinstance(text, list): raise ... return [i for i in text if i == 'Hey']
@MagMigo
@MagMigo Рік тому
@@scrooge6603 Уже в этом случае нет проблем, но если ты будешь делать так def hello(text: str) -> bool: # Допустим, тебе будет нужна функция, где тебе надо чтоб возвращался только буль return isinstance(str, text) Под алгебра-логикой я это имел ввиду.
@Novice2213
@Novice2213 Рік тому
append_score(score, scores=[]) - имба вообще, не знал о таком, спасибо!
@PRONCHENKO
@PRONCHENKO Рік тому
Привет, а каким дистрибутивом ты пользуешься?
@MagMigo
@MagMigo Рік тому
Вроде как это манжаро какая-то
@zproger
@zproger Рік тому
ZorinOS
@PRONCHENKO
@PRONCHENKO Рік тому
@@zproger Спасибо
@owa_creator
@owa_creator 2 місяці тому
Смотрел это видео и одновременно делал оператор "в" в своем языке :P
@user-ul5ic2rw5h
@user-ul5ic2rw5h Рік тому
3:46 Развёрнутые комментарии лучше всего делать внутри функции для объяснения смысла алгоритма и всяких не очевидных "подводных" особенностей. А короткие комментарии должны быть превращены в название функции, в которую войдёт комментируемый кусок кода.
@demg7738
@demg7738 11 місяців тому
Правильные советы, только возвращаемый тип в первом примере лучше сделать list[int].
@user-se7gh5xh7p
@user-se7gh5xh7p Рік тому
Да, интересно тут)) Если можно голосовать за тему для выпуска, то голосую за борьбу с круговыми импортами)
@zproger
@zproger Рік тому
Хорошая идея, спасибо
@thegate8985
@thegate8985 Рік тому
Привет! Спасибо за ролик! Очень не хватает разбиение ролика на таймкоды :(
@stargrapefruit7737
@stargrapefruit7737 10 місяців тому
Что за приложение для кода?
@QwDragon
@QwDragon Рік тому
Args мне кажется довольно полезной штукой. По крайней мере в js используется не так уж редко.
@dath
@dath Рік тому
Это же чистый код в вольном пересказе, хосподе, это же такая база
@zproger
@zproger Рік тому
ещё бы =)
@DERJNDZE
@DERJNDZE Рік тому
Вместо, а даже лучше вместе с комментариями хорошо использовать докстринги. Если не хочется лезть в модуль и вычитывать там функционал функции, просто пишешь хельп(), и он у тебя на ладони. Тоесть в докстринги пишем комментарии по использованию, в обычные коменты - по реализации
@zproger
@zproger Рік тому
Да, вот только кликнуть по функции быстрее, чем вызывать help, но docstring крутая штука
@aleksversus
@aleksversus Рік тому
def - создаёт объект класса function, которому назначаются поля. Если мы не переопределяем эти поля при вызове функции, естественно мы работаем со значениями, которые уже определены для полей. За счёт этого, как я понимаю, работают всякие функции-генераторы. Да, это поведение не вполне очевидно, если мыслить в рамках процедурного программирования, к сожалению.
@user-ce8fj5ev6p
@user-ce8fj5ev6p Рік тому
3:12 Вы хоть сами поняли, что написали, может быть вы имели from lib import * : в таком случае все функции и классы запишутся в основной модуль А если import lib : то к функциям и классам придётся обращаться через имя библитеки и уникальность уже не обязательна
@zproger
@zproger Рік тому
действительно, даже и не заметил как написал это
@user-fs6vk7pe8l
@user-fs6vk7pe8l Рік тому
Ну ошибся человек, с кем не бывает
@GladSpiR
@GladSpiR Рік тому
7:04 а что тут не так? вполне может быть оберткой для трубы, а далее уже по логике но название и действия должны как-то матчится 2:06 это же язык динамической типизации зачем резать на входе-то? Массивы же разные могут быть, тут или имя менять или логику внутри функции.
@andrewbobrow3815
@andrewbobrow3815 7 місяців тому
Я наверно спрошу какую-то глупость... Я понял, что функция append_score где-то там внутри хранит значение аргумента по умолчанию - список по умолчанию scores - и при каждом вызове функции без указания аргумента по умолчанию этот "список по умолчанию" дополняется. Вопрос - как добраться до этого "списка по умолчанию" извне этой функции? Или инкапсуляция этого не позволит? То есть - вызвали функцию без аругмента по умолчанию, она внутри себя создала переменную типа указатель (с простым числом это не прокатывает), этот указатель указывает на одну и ту же область памяти, и при каждом вызове функции без аргумента по умолчанию содержимое этой области памяти ("список по умолчанию") последовательно модифицируется. И этот "список по умолчанию" хранится до конца работы пограммы, но до него никак не добрешься? Я примерно предполагаю ответ - доступ к этому "списку по умолчанию" должен быть предусмотрен логикой программы, в данном примере такого доступа нет - ну и доступа нет. Но все равно страннно. В этом есть какой-то полезный смысл, или это побочный эффект архитектуры Питона?
@apxapa8749
@apxapa8749 23 години тому
Есть конечно доступ через магические методы, спроси чат жпт
@klausfernius5115
@klausfernius5115 Рік тому
Крутое и полезное видео, но про память все равно не понял
@amadeus1300
@amadeus1300 Рік тому
спс за видосян
@zproger
@zproger Рік тому
Рад стараться =)
@user-pg8ry1tm3t
@user-pg8ry1tm3t 3 місяці тому
Хорошая практика имхо - не писать комменты на каждой строке функции, а документировать ее той же док строкой…
@user-gu2en4ml3u
@user-gu2en4ml3u Рік тому
Скажите, пожалуйста. Почему функция называется get_array, если возвращает не array, а list?
@MagMigo
@MagMigo Рік тому
Список в питон практически тоже самое, что и массив Да, всё же разное, но имеет место быть
@nakidai
@nakidai Рік тому
@@MagMigo Это не практически тоже самое, у массивов есть свой тип, и все его элементы одного типа. А в списках типа нет, и элементы могут быть любые.
@zproger
@zproger Рік тому
Ну это ведь пример) а вообще списки и массивы отличаются между собой, и об этом есть след.видео: ukposts.info/have/v-deo/l4Zle2p4cKyWyX0.html
@andyzmn3391
@andyzmn3391 Рік тому
bad practice делать импорт через *
@zproger
@zproger Рік тому
Согласен
@dann1kid
@dann1kid Рік тому
про датаклассы расскажи. Слотс, фриз там вот это вот всё
@blanjel6921
@blanjel6921 5 місяців тому
Найс, выучил Python, теперь иди учи английский, потому что циклы циклами, а названия за тебя никто не придумает :D Спасибо за полезный материал! Но не проще ли просто писать коммент к функции и не париться с придумываем названий, особенно когда у тебя в одной проге 100500 этих функций и уже фантазия закончилась :D
@greshnik_d
@greshnik_d Рік тому
4 года сижу на питоне, аргсы и кваргсы использовал только в обучении. Что я делаю не так?
@garrywood9195
@garrywood9195 Рік тому
В формах в джанго не попадались? Например добавить данные из базы в форму?
@4aidze
@4aidze Рік тому
не наследуешь методы у сложных классов с полиморфизмом)
@ybw____
@ybw____ Рік тому
возможно имеет смысл рассказать как избегать цыкличных импортов?
@zproger
@zproger Рік тому
Да, расскажу в ближайшем видео
@user-jf5bn1jw3b
@user-jf5bn1jw3b Рік тому
Насчет args, kwargs не совсем согласен, часто использую, особенно когда нужно наследовать какой-либо класс и добавить в него свой функционал, не изменяя уже существующий, но пример из видео, да, согласен - ужас)
@zproger
@zproger Рік тому
Имелось в виду не использовать тогда, когда без него можно спокойно обойтись =)
@user-jf5bn1jw3b
@user-jf5bn1jw3b Рік тому
@@zproger ну это да, просто вы начали говорить, что за все время раз 5 использовали, мне это показалось странным
@shrimp4567
@shrimp4567 Рік тому
Почти все про очевидные вещи, да и не все они фатальны
@span4ev
@span4ev Рік тому
import lib import * хм... Может всё таки from lib import *?
@zproger
@zproger Рік тому
да, там ошибка которую я неосознанно совершил
@JustLikeChannel
@JustLikeChannel Рік тому
какой у вас дистрибутив?
@zproger
@zproger Рік тому
ZorinOS
@dx8026
@dx8026 Рік тому
1. Документируем только функции или методы класса 2. Пишем чистый код Вот и всё))
@non5309
@non5309 Рік тому
Что-то все в кучу и солид принципы и нейминг и аннотация и изменяемые типы.
@zproger
@zproger Рік тому
Это да, но думаю лишним не будет
@QwDragon
@QwDragon Рік тому
Аннотации мне тоже показались неожиданными в этом видео, а остальное - всё по теме.
@NearBirdsamp
@NearBirdsamp Рік тому
Раз 10 за 3-4 года использовать *args и **kwargs - смешно Самый банальный и частоиспользуемый пример - wrapper'ы
@lichcraft_official
@lichcraft_official Рік тому
А будет контент по rust?
@zproger
@zproger Рік тому
Хотелось бы, но опыта в нем ещё маловато
@lichcraft_official
@lichcraft_official Рік тому
@@zproger Как и у меня. Каждый день узнаю что-то новое для себя.
@robertobokarev439
@robertobokarev439 Рік тому
Нафига, а главное зачем? Этот язык уже давно дед инсайт
@MagMigo
@MagMigo Рік тому
@@robertobokarev439 че несёшь, раст развивающийся и хороший язык
@endlessvd
@endlessvd Рік тому
А чё делать на C++? Там нет всех этих удобных штучек, все сердито
@zproger
@zproger Рік тому
Писать с нуля =)
@SergeyKozhukhov
@SergeyKozhukhov Рік тому
Ну, первый совет - это очень круто, но чревато циклическим импортом. Я ставлю описание типа в doc string.
@MagMigo
@MagMigo Рік тому
Чтоб решалась проблема с цикличным импортом и существует константа typing.TYPE_CHECKING
@aleksei_stereo
@aleksei_stereo Рік тому
А где в видео разбор проблемы с картинки?
@user-fc3gh1rb7w
@user-fc3gh1rb7w Рік тому
мдеее. Товарищи, пишите на шарпе. лучше шарпа ничего нет и никогда не будет!
@zproger
@zproger Рік тому
у каждого свой идеальный язык =)
@dnr_8365
@dnr_8365 5 місяців тому
Странно, ролику больше года и ни одногт лайка?
@darjusvasiukevic2120
@darjusvasiukevic2120 Рік тому
Я человек простой, тыкаю пальцем в букварь - называю функцию
@zproger
@zproger Рік тому
😮
@artembagachkov933
@artembagachkov933 Рік тому
Вау, 30к, супер!
@zproger
@zproger Рік тому
=)
@mair1735
@mair1735 Рік тому
почему-то мне вспомнился YANDERE simulator
@zproger
@zproger Рік тому
Странно :D
@dmitry-lz1ny
@dmitry-lz1ny Рік тому
А что делает **? Одинарная * это распаковка, а двойная для чего?
@zproger
@zproger Рік тому
* - распаковка списков ** - распаковка словарей
@vladislav8860
@vladislav8860 Рік тому
В плане типов данных, принимаемых аргументов проблема всех не строго типизированных языков. На Цпп такого не встретить
@T0unFl3it
@T0unFl3it Рік тому
Здравствуйте, одна маленькая поправочка: Вы здесь имеете в виду языки со _статической типизацией_, где типы переменных и выражений объявляются программистом или выводятся компилятором. Определение же "строгой/слабой" типизации зависит от сообщества, в котором употребляется. Иногда термин "строгая типизация" используется как синоним статической типизации (как в Вашем комментарии), но есть также и такое (на мой взгляд, лучшее) определение: язык является "строго типизированным", если он не позволяет нарушить собственные абстракции (такие, как типы данных) (по крайней мере, в "безопасных" контекстах). В таком понимании язык Python является строго типизированным языком с динамической типизацией, а C++ является слабо типизированным языком со статической типизацией (т.е., понятия "строгости" и "времени" типизации ортогональны). Просто мои пять копеек, думаю, кому-то будет полезно знать о таких альтернативных определениях ;-)
@David_USA
@David_USA Рік тому
Пожалуйста, ТАЙМ-КОДЫ!
@iljakot_tran4131
@iljakot_tran4131 Рік тому
Пусть тебе из множества N возможных лайков, return N[-1]
@user-se7gh5xh7p
@user-se7gh5xh7p Рік тому
Зачет)
@zluka7951
@zluka7951 Рік тому
дядя Боб для маленьких
@zproger
@zproger Рік тому
:)
@user-ur5kc8er8w
@user-ur5kc8er8w Рік тому
При чём тут пайтон? Данные рекомендации относятся к большинству языков программирования
@zproger
@zproger Рік тому
Согласен, но примеры именно на Python, поэтому назвал видео таким образом.
@user-ur5kc8er8w
@user-ur5kc8er8w Рік тому
​@@zproger Да, это понятно. Просто точно такие же темы обсуждаются в других языках программирования и точно так же не указывается что это общие правила программирования. Но понравилось чьё-то высказывание: "Самое главное и самое сложное в программировании- правильно назвать функцию".
@RoKivals
@RoKivals Рік тому
Во второй ошибке (про уникальность имён функций и конфликт с другими либами) откровенно говоря бред. По вашей логике, человек при подключении библиотек должен прочитать абсолютно все ее функции и их имена, чтобы не повториться, вместо того чтобы просто нормально импортировать. Да и вообще можно было приличия ради добавить, как решить проблему ссылочного типа в аргументе
@zener_blitz
@zener_blitz Рік тому
IDE подскажет если ты перезапишешь функцию из модуля это раз. Как правило в модулях просто функций нет, есть только методы внутри класса это два. Скорее речь шла о ваших собственных модулях. Не используйте wildcard import это три)
@user-ly6jh3pc6z
@user-ly6jh3pc6z Рік тому
Спасибо, огромное за такие ролики, жалко, что ты не можешь сравниться с активностью с миллиониками которые снимают говно контент
@zproger
@zproger Рік тому
Ну я выпускаю видео каждые 7 дней, за ~3 года ни разу не отошел от этих сроков =)
@alfobarasovich55
@alfobarasovich55 Рік тому
@@zproger смотрю тебя как аниме сериал еженедельно ждя новые серии :D
@zproger
@zproger Рік тому
:D
@user-ly6jh3pc6z
@user-ly6jh3pc6z Рік тому
@@zproger имелось ввиду активностью на канале: просмотры, лайки и т.п.
@zproger
@zproger Рік тому
А, ну если снимать гавно то тоже будет активность большая) Но мне не интересно такое снимать
@mygodishe
@mygodishe Рік тому
Тут бы зашел тикто надо вот так
@dann1kid
@dann1kid Рік тому
Разбей видос на главы, а то некоторые фичи я уже знаю, а где ты описываешь другие я хз
@printon4087
@printon4087 Рік тому
Можете порекомендовать ресурс для изучения Python, может книжку какую-то? Оплачивать обучение на данный момент не очень хочу, как минимум потому что мне 15 лет. Смотрел уже 3 бесплатных курса на ютубе, но хочу продвигаться дальше.
@user-cs5jp1ik6f
@user-cs5jp1ik6f Рік тому
Sololearn, Проект Эйлера (первые 35 упражнений, дальше больше математика. С какого-то момента сложность резко возрастает, так-что несколько дней на упражнение станет нормой) и если совсем ноль в программировании "Грокаем алгоритмы". Когда добрался до них показались примитивными, но может просто забыл как учился ездить на велосипеде. Дальше гугл, свой проект и возможно Лутц. Лутц это не учебник, а скорее справочник. Читать только чтобы убедиться что ничего не пропустил, и то через год-полтора. Советую так же уже сейчас учить слепую печать. Полотенце на клавиатуру, указательные на пупырки и 30 минут в день месяц-полтора. После такой базы скорость печати вернется на прежний уровень и практику можно будет набивать на бытовом печатании. Сам проходил в 14, когда даже не думал о программировании. Зачем? В темноте не было видно клавиатуры :D Ах да, нулевой язык программирования - английский. Любой интернетный текст в зубы (Литературный носители переусложняют) и переводим гугл-переводчиком слово за словом примечая частые. Первые 50 часов ничего в голове задерживаться не будет, и это нормально. И не стоит гнаться за "100%" английским. Его не бывает. Игровой, ютуберный, программисткий, математический английские - выбери кусочки и все. По своему опыту так же скажу, что чтение можно выучить в вакууме. Произношение, слух и разговор можно отложить лет до 20. Так же для мотивации идеально подойдут уроки. В 9 классе за вами как раз перестанут следить, если не уже. Ну и бонус за простыню. Написано так ясно, что переводчик переводит как с русского на русский: betterexplained.com/articles/a-visual-intuitive-guide-to-imaginary-numbers/
@user-ed8cq1rw8h
@user-ed8cq1rw8h Рік тому
корисно
@zproger
@zproger Рік тому
Спасибо!
@Dark161161
@Dark161161 Рік тому
Грамотно
@zproger
@zproger Рік тому
Благодарю
@TePeM
@TePeM Рік тому
А ещё, когда опорожняетесь- снимайте штанишки. Для кого этот мануал? Я без негатива к автору, просто интересно- есть люди, которые изучают синтаксис/продвинутый уровень и для них это не очевидно?
@4aidze
@4aidze Рік тому
угу, знаю таки, кодят как орки, знают кучу языков и фреймворков
@4aidze
@4aidze Рік тому
и не один не используют нормально
@red__floyd
@red__floyd Рік тому
ПОЧЕМУУУУ ФУНЦИЯ?????
@MagMigo
@MagMigo Рік тому
Что
@nakidai
@nakidai Рік тому
Потому, что не процедура
@stepandemin5836
@stepandemin5836 Рік тому
Ничего полезного. Очередной говнокод от виндузяшника
@zproger
@zproger Рік тому
ну не смотрите тогда, никто не заставляет
18 Фишек Python о которых мало кто говорит
14:13
顔面水槽がブサイク過ぎるwwwww
00:58
はじめしゃちょー(hajime)
Переглядів 55 млн
Історія загиблого Назара Небожинського
00:54
Суспільне Рівне
Переглядів 894 тис.
10 признаков того, что вы новичок в Python
4:59
ПАРСИНГ КОМПАНИЙ В 2GIS | Как написать парсер на selenium (Python)
9:02
Артём Ипатов - Python на практике
Переглядів 3,9 тис.
Рекурсия в Python
52:13
Python Russian
Переглядів 2,6 тис.
Как выучить Python БЫСТРО используя ChatGPT?
10:10
ZProger [ IT ]
Переглядів 336 тис.
C++ Разработчик учит Python
28:01
Winderton
Переглядів 466 тис.
Как избавиться от циклов импорта в Python
13:09
ТОП 8 Редких и Удобных фишек в Python
10:57
ZProger [ IT ]
Переглядів 27 тис.
顔面水槽がブサイク過ぎるwwwww
00:58
はじめしゃちょー(hajime)
Переглядів 55 млн