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

  Рет қаралды 83,166

ZProger [ IT ]

ZProger [ IT ]

Күн бұрын

Пікірлер: 158
@MEZHGANO
@MEZHGANO 2 жыл бұрын
Все по делу, спасибо. Если вдруг кто не в курсе, то комментарий к функции лучше писать в тройных кавычках в теле функции, тогда он появится в подсказке при наведении курсора на функцию
@zproger
@zproger 2 жыл бұрын
Спасибо за дополнение к видео, это хороший совет
@dmitrykoklyagin2916
@dmitrykoklyagin2916 2 жыл бұрын
1. Думаем над именами функций и классов. Код пишется один раз, а читается постоянно. 2. Type annotations для функций и внимательно отслеживаем несоответствия по типам данных на уровне проекта. Очень много херни позволяет отловить с минимальной задержкой. 3. Докстринги, в которых описываемых всё, что функция принципиально делает. Комментарии - только там, где надо пояснить какое-то неочевидное решение, из-за, например, изврата бизнес-логики. 4. from xxx import * --- должен вообще не пройти код ревью коллег и не попасть в мастер. 5. В числе ревьюеров должен быть маньяк идеи чистого кода, нам повезло, у нас их два.
@zproger
@zproger 2 жыл бұрын
Маньяки чистого кода это хорошо
@fearruxx
@fearruxx 8 ай бұрын
несколько курсов на степике прошел по питону, видел как люди писали в функциях аннотацию, но не понимал для чего конкретно это нужно, теперь разобрался; начал смотреть твой канал и ты мне очень помогаешь в понимании этого языка, спасибо тебе, твой канал один из лучших по питону!
@riventarakoss1546
@riventarakoss1546 2 жыл бұрын
Не понимаю, почему ролик выходит то для новичков, то для тех, кто уже смешарик. Это БАЗА
@zproger
@zproger 2 жыл бұрын
Бывает =)
@bspumo3830
@bspumo3830 2 жыл бұрын
Лайк за смешариков 👍🏿
@savtis2606
@savtis2606 2 жыл бұрын
Базированный гигачад
@killuar0294
@killuar0294 Жыл бұрын
Сколько часов в шарараме?
@frontend_developer_anti_vata
@frontend_developer_anti_vata Жыл бұрын
​@@killuar02948 лет умножить на 8760 часов = 70080
@MaxusR
@MaxusR 2 жыл бұрын
Насчёт неочевидных имён функций согласен на все 200%, а вот насчёт требования к уникальности названий категорически против. Кто сделал import *, тот сам дурак. А если в двух разных модулях функции выполняют логически одно и то же, но по-разному, то почему-бы и не назвать их идентично.
@zener_blitz
@zener_blitz 2 жыл бұрын
Так речь идёт не про разные модули, в разных модулях эти функции не будут пересекаться.
@aliakseybaradulkin2443
@aliakseybaradulkin2443 2 жыл бұрын
Я бы добавил еще про ОПП Мы должны использовать классы осознанно, не просто для того что б имена функций были более краткими и понятными, а с какой то целью например хранение состояния (это было сказано, но как дополнительный бонус) или возможности полиморфизма и прочие плюсы классов просто использовать функции что б сократить имена классов и тд - это не правильно
@SashaGun_GD
@SashaGun_GD 2 жыл бұрын
import * нужен только в tkinter
@SolistTV
@SolistTV 2 жыл бұрын
6:28 лишним плюсом реализации методов класса вместо функций будет полиморфизм, который станет, доступным для методов. Об уникальности методов нужно будет думать только в рамках класса, а не всей системы. К тому же, созданный класс задаст контекст использования методов, будет проще контролировать инпут/аутпут.
@SYPERSTAR1986
@SYPERSTAR1986 2 жыл бұрын
Спасибо большое дружище, очень крутой и познавательный видос!!!
@zproger
@zproger 2 жыл бұрын
Спасибо =)
@romanbush5164
@romanbush5164 2 жыл бұрын
Молодец объяснил чистый код и принципы солид), а про scores это жесть, поэтому лучше писать в ооп стиле
@irwe3514
@irwe3514 2 жыл бұрын
Очень интересно и информативно, жду следущих видео)
@zproger
@zproger 2 жыл бұрын
Благодарю :)
@vasiliynet3425
@vasiliynet3425 Жыл бұрын
В примере про скорс, с добавлением числа в массиву, меняется аргумент, чего в чистых функциях быть не должно, поэтому и возникло затруднение при вызовах. Должен был создаваться новый массив и возвращать результат. В JS это понимание очень часто играет.
@ИванНикитин-ч7б
@ИванНикитин-ч7б 2 жыл бұрын
3:46 Развёрнутые комментарии лучше всего делать внутри функции для объяснения смысла алгоритма и всяких не очевидных "подводных" особенностей. А короткие комментарии должны быть превращены в название функции, в которую войдёт комментируемый кусок кода.
@MagMigo
@MagMigo 2 жыл бұрын
Могу про лямбду добавить: есть вот люди, которые постоянно везде суют лямбду, т.е. x = lambda y: y ** 2 print(x(5)) Сделайте вид, что тут что-то сложное. И вот, часто замечал, что многие любят делать огромные строки, где тупа одна лямбда как какая-то функция Это нарушение PEP8 про длину строки и ещё одно нарушение, что лямбда используется неправильно (даже в пепе есть (!!)) Правильно лямбда используется в таких моментах: print(sorted(["c", "b", "a"], key=lambda x: x[0].lower())) # prints: ['a', 'b', 'c'] Это просто пример, но думаю суть ясна. Вооооооооооооооооот, да
@random_company
@random_company 10 ай бұрын
Смотрел это видео и одновременно делал оператор "в" в своем языке :P
@ЕвгенийИрдеев
@ЕвгенийИрдеев 2 жыл бұрын
Спасибо!Информативно и полезно!
@zproger
@zproger 2 жыл бұрын
Благодарю
@Novice2213
@Novice2213 Жыл бұрын
append_score(score, scores=[]) - имба вообще, не знал о таком, спасибо!
@robertobokarev439
@robertobokarev439 2 жыл бұрын
3 совета очевидны (овер или недокоммент, нет аннотаций, плохое название функции). Как предложение, можно добавить объяснение поч плохо сохранять лямбды в переменные, использовать простые функции в абстракциях (для новичков может быть непонятно), почему перегрузка функций typing.overload с одним и тем же параметром с разным названием вне .pyi файла вообще нежелательно (Моё мнение).
@КириллЕвплов-з4г
@КириллЕвплов-з4г 2 жыл бұрын
Спасибо за информативный и понятный контент)
@zproger
@zproger 2 жыл бұрын
Рад что понравилось
@nickolayfetlistov4416
@nickolayfetlistov4416 2 жыл бұрын
За видео спасибо, уже так сказать опытная котлета но на одном из первых собесов с ссылочками на листочки поплыл) Полезно однако)
@zproger
@zproger 2 жыл бұрын
Рад что помогло =))
@eugenebybin6403
@eugenebybin6403 2 жыл бұрын
Спасибо за видео, структурированно и понятно
@zproger
@zproger 2 жыл бұрын
Рад что понравилось
@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) и т.д.. Раз мы все так не делаем, то следует предположить, что идея плохая и классы придуманы для другого (а такое "нововведение" лишь без причины усложнит код). Насчёт передачи по ссылке параметра по-умолчанию - я бы это охарактеризовал как баг питона. Согласен, работая с питоном об этом следует знать и в этом плане респект автору (лично я на питоне не пишу, потому для меня это было открытием). Но это значит, что в питоне не скалярные параметры с заданным значением по-умолчанию использовать нельзя, потому что это по определению функция грязная, которая обязательно породит непредсказуемое поведение. Потому часть про "если вы знаете как, то можете это использовать" из разряда вредных советов.
@otetz77
@otetz77 2 жыл бұрын
Импорт через звездочку просто надо себе запретить. Оооочень много проблем снимает. А в удобстве почти не теряешь с современными редакторами.
@zproger
@zproger 2 жыл бұрын
Согласен
@Анимешница-я1у
@Анимешница-я1у 2 жыл бұрын
Можешь напомнить плз, какой дистрибут линукса ты юзаешь???
@zproger
@zproger 2 жыл бұрын
ZorinOS
@aleksversus
@aleksversus Жыл бұрын
def - создаёт объект класса function, которому назначаются поля. Если мы не переопределяем эти поля при вызове функции, естественно мы работаем со значениями, которые уже определены для полей. За счёт этого, как я понимаю, работают всякие функции-генераторы. Да, это поведение не вполне очевидно, если мыслить в рамках процедурного программирования, к сожалению.
@АлексейБогомолов-ж2ф
@АлексейБогомолов-ж2ф 27 күн бұрын
На питоне пишу неделю. До этого практически ничего не кодил . Какой прием успел вывести: Сперва высматриваю в задаче задачки поменьше. То есть, пишу мини библиотеку методов под одну задачу. Нафига: а чтоб не запутаться. Это как собирать дом готовыми модулями. Конечно не все действия так заранее прописываю, только более или менее типовые.
@ПавелВикторов-п4ю
@ПавелВикторов-п4ю 2 жыл бұрын
Да, интересно тут)) Если можно голосовать за тему для выпуска, то голосую за борьбу с круговыми импортами)
@zproger
@zproger 2 жыл бұрын
Хорошая идея, спасибо
@PRONCHENKO
@PRONCHENKO 2 жыл бұрын
Привет, а каким дистрибутивом ты пользуешься?
@MagMigo
@MagMigo 2 жыл бұрын
Вроде как это манжаро какая-то
@zproger
@zproger 2 жыл бұрын
ZorinOS
@PRONCHENKO
@PRONCHENKO 2 жыл бұрын
@@zproger Спасибо
@scrooge6603
@scrooge6603 2 жыл бұрын
Я тут в общем, пишу функцию и тут ты! Спасибо, обязательно посмотрю позже! Я проверяю инстансами, и зачастую люблю писать в одну строку так: ('True' if mesg == 'hi' else 'False'), [i for i in mesg....]
@MagMigo
@MagMigo 2 жыл бұрын
Не пиши буль не булем True/False должны быть без "", а ещё у тебя здесь проблемы c алгебра-логикой и можно сделать просто return mesg == "hi"
@scrooge6603
@scrooge6603 2 жыл бұрын
@@MagMigo 1.С булами затупил немного когда писал это, а так, я делаю реальными булами без " " 2.Нет, у меня нет проблем с логикой, я не сказал ещё если в друг мне нужно по листу пройтись или написть что-то если Тру или Фолз Примерно так, выглядит моя функция: def hello(text): if not isinstance(text, list): raise ... return [i for i in text if i == 'Hey']
@MagMigo
@MagMigo 2 жыл бұрын
@@scrooge6603 Уже в этом случае нет проблем, но если ты будешь делать так def hello(text: str) -> bool: # Допустим, тебе будет нужна функция, где тебе надо чтоб возвращался только буль return isinstance(str, text) Под алгебра-логикой я это имел ввиду.
@demg7738
@demg7738 Жыл бұрын
Правильные советы, только возвращаемый тип в первом примере лучше сделать list[int].
@dowlso
@dowlso 2 жыл бұрын
3:12 Вы хоть сами поняли, что написали, может быть вы имели from lib import * : в таком случае все функции и классы запишутся в основной модуль А если import lib : то к функциям и классам придётся обращаться через имя библитеки и уникальность уже не обязательна
@zproger
@zproger 2 жыл бұрын
действительно, даже и не заметил как написал это
@Троль-н7в
@Троль-н7в Жыл бұрын
Ну ошибся человек, с кем не бывает
@GladSpiR
@GladSpiR 2 жыл бұрын
7:04 а что тут не так? вполне может быть оберткой для трубы, а далее уже по логике но название и действия должны как-то матчится 2:06 это же язык динамической типизации зачем резать на входе-то? Массивы же разные могут быть, тут или имя менять или логику внутри функции.
@stargrapefruit
@stargrapefruit Жыл бұрын
Что за приложение для кода?
@dath
@dath 2 жыл бұрын
Это же чистый код в вольном пересказе, хосподе, это же такая база
@zproger
@zproger 2 жыл бұрын
ещё бы =)
@andreypronko1859
@andreypronko1859 7 ай бұрын
Всё правильно. Если даже тебе нет дела до тех, кто согнал тебя с работы, и теперь поддерживает твой код, позаботься о себе драгоценном. Понять собственный код, который ты писал год назад, особенно в крупном проекте, на пару сотен питон-файлов, очень не просто. Надо осмысленно называть модули, функции, классы, и даже соорудить простейший сервер с документацией и поиском по ней.
@shinkun4614
@shinkun4614 2 жыл бұрын
Хороший видосик)
@zproger
@zproger 2 жыл бұрын
=)
@nartoomeon9378
@nartoomeon9378 Жыл бұрын
Из последнего коротко: меньше кода, больше функционала.
@ИннаЛиксакова-о4н
@ИннаЛиксакова-о4н Жыл бұрын
Видео очень хорошее, но можно было бы сюда сразу теории докинуть, так как в видео упоминается, и про Single responsibility principle , и про DRY, и про KISS
@thegate8985
@thegate8985 Жыл бұрын
Привет! Спасибо за ролик! Очень не хватает разбиение ролика на таймкоды :(
@АлексейСтручев-т1ж
@АлексейСтручев-т1ж 2 жыл бұрын
Скажите, пожалуйста. Почему функция называется get_array, если возвращает не array, а list?
@MagMigo
@MagMigo 2 жыл бұрын
Список в питон практически тоже самое, что и массив Да, всё же разное, но имеет место быть
@nakidai
@nakidai 2 жыл бұрын
@@MagMigo Это не практически тоже самое, у массивов есть свой тип, и все его элементы одного типа. А в списках типа нет, и элементы могут быть любые.
@zproger
@zproger 2 жыл бұрын
Ну это ведь пример) а вообще списки и массивы отличаются между собой, и об этом есть след.видео: kzbin.info/www/bejne/lYeXeGd3btuYnqs
@QwDragon
@QwDragon 2 жыл бұрын
Args мне кажется довольно полезной штукой. По крайней мере в js используется не так уж редко.
@nouaksomtac6782
@nouaksomtac6782 7 ай бұрын
*args и **kwargs исползуетса доволна часто в декораторах и прий написаний библиотекий
@КириллЧе-я5ы
@КириллЧе-я5ы 11 ай бұрын
Хорошая практика имхо - не писать комменты на каждой строке функции, а документировать ее той же док строкой…
@andrewbobrow3815
@andrewbobrow3815 Жыл бұрын
Я наверно спрошу какую-то глупость... Я понял, что функция append_score где-то там внутри хранит значение аргумента по умолчанию - список по умолчанию scores - и при каждом вызове функции без указания аргумента по умолчанию этот "список по умолчанию" дополняется. Вопрос - как добраться до этого "списка по умолчанию" извне этой функции? Или инкапсуляция этого не позволит? То есть - вызвали функцию без аругмента по умолчанию, она внутри себя создала переменную типа указатель (с простым числом это не прокатывает), этот указатель указывает на одну и ту же область памяти, и при каждом вызове функции без аргумента по умолчанию содержимое этой области памяти ("список по умолчанию") последовательно модифицируется. И этот "список по умолчанию" хранится до конца работы пограммы, но до него никак не добрешься? Я примерно предполагаю ответ - доступ к этому "списку по умолчанию" должен быть предусмотрен логикой программы, в данном примере такого доступа нет - ну и доступа нет. Но все равно страннно. В этом есть какой-то полезный смысл, или это побочный эффект архитектуры Питона?
@apxapa8749
@apxapa8749 7 ай бұрын
Есть конечно доступ через магические методы, спроси чат жпт
@dx8026
@dx8026 Жыл бұрын
1. Документируем только функции или методы класса 2. Пишем чистый код Вот и всё))
@darjusvasiukevic2120
@darjusvasiukevic2120 2 жыл бұрын
Я человек простой, тыкаю пальцем в букварь - называю функцию
@zproger
@zproger 2 жыл бұрын
😮
@blanjel6921
@blanjel6921 Жыл бұрын
Найс, выучил Python, теперь иди учи английский, потому что циклы циклами, а названия за тебя никто не придумает :D Спасибо за полезный материал! Но не проще ли просто писать коммент к функции и не париться с придумываем названий, особенно когда у тебя в одной проге 100500 этих функций и уже фантазия закончилась :D
@non5309
@non5309 2 жыл бұрын
Что-то все в кучу и солид принципы и нейминг и аннотация и изменяемые типы.
@zproger
@zproger 2 жыл бұрын
Это да, но думаю лишним не будет
@QwDragon
@QwDragon 2 жыл бұрын
Аннотации мне тоже показались неожиданными в этом видео, а остальное - всё по теме.
@DERJNDZE
@DERJNDZE 2 жыл бұрын
Вместо, а даже лучше вместе с комментариями хорошо использовать докстринги. Если не хочется лезть в модуль и вычитывать там функционал функции, просто пишешь хельп(), и он у тебя на ладони. Тоесть в докстринги пишем комментарии по использованию, в обычные коменты - по реализации
@zproger
@zproger 2 жыл бұрын
Да, вот только кликнуть по функции быстрее, чем вызывать help, но docstring крутая штука
@JustLikeChannel
@JustLikeChannel 2 жыл бұрын
какой у вас дистрибутив?
@zproger
@zproger 2 жыл бұрын
ZorinOS
@klausfernius5115
@klausfernius5115 2 жыл бұрын
Крутое и полезное видео, но про память все равно не понял
@greshnik_d
@greshnik_d 2 жыл бұрын
4 года сижу на питоне, аргсы и кваргсы использовал только в обучении. Что я делаю не так?
@garrywood9195
@garrywood9195 2 жыл бұрын
В формах в джанго не попадались? Например добавить данные из базы в форму?
@4aidze
@4aidze 2 жыл бұрын
не наследуешь методы у сложных классов с полиморфизмом)
@ybw____
@ybw____ 2 жыл бұрын
возможно имеет смысл рассказать как избегать цыкличных импортов?
@zproger
@zproger 2 жыл бұрын
Да, расскажу в ближайшем видео
@NearBirdsamp
@NearBirdsamp 2 жыл бұрын
Раз 10 за 3-4 года использовать *args и **kwargs - смешно Самый банальный и частоиспользуемый пример - wrapper'ы
@SergeyKozhukhov
@SergeyKozhukhov 2 жыл бұрын
Ну, первый совет - это очень круто, но чревато циклическим импортом. Я ставлю описание типа в doc string.
@MagMigo
@MagMigo 2 жыл бұрын
Чтоб решалась проблема с цикличным импортом и существует константа typing.TYPE_CHECKING
@АндрейГоляновский-х4й
@АндрейГоляновский-х4й 2 жыл бұрын
мдеее. Товарищи, пишите на шарпе. лучше шарпа ничего нет и никогда не будет!
@zproger
@zproger 2 жыл бұрын
у каждого свой идеальный язык =)
@УголокКодера
@УголокКодера 2 жыл бұрын
Насчет args, kwargs не совсем согласен, часто использую, особенно когда нужно наследовать какой-либо класс и добавить в него свой функционал, не изменяя уже существующий, но пример из видео, да, согласен - ужас)
@zproger
@zproger 2 жыл бұрын
Имелось в виду не использовать тогда, когда без него можно спокойно обойтись =)
@УголокКодера
@УголокКодера 2 жыл бұрын
@@zproger ну это да, просто вы начали говорить, что за все время раз 5 использовали, мне это показалось странным
@endlessvd
@endlessvd 2 жыл бұрын
А чё делать на C++? Там нет всех этих удобных штучек, все сердито
@zproger
@zproger 2 жыл бұрын
Писать с нуля =)
@andyzmn3391
@andyzmn3391 2 жыл бұрын
bad practice делать импорт через *
@zproger
@zproger 2 жыл бұрын
Согласен
@amadeus1300
@amadeus1300 2 жыл бұрын
спс за видосян
@zproger
@zproger 2 жыл бұрын
Рад стараться =)
@aleksei_stereo
@aleksei_stereo 2 жыл бұрын
А где в видео разбор проблемы с картинки?
@span4ev
@span4ev Жыл бұрын
import lib import * хм... Может всё таки from lib import *?
@zproger
@zproger Жыл бұрын
да, там ошибка которую я неосознанно совершил
@dmitry-lz1ny
@dmitry-lz1ny 2 жыл бұрын
А что делает **? Одинарная * это распаковка, а двойная для чего?
@zproger
@zproger 2 жыл бұрын
* - распаковка списков ** - распаковка словарей
@lichcraft_official
@lichcraft_official 2 жыл бұрын
А будет контент по rust?
@zproger
@zproger 2 жыл бұрын
Хотелось бы, но опыта в нем ещё маловато
@lichcraft_official
@lichcraft_official 2 жыл бұрын
@@zproger Как и у меня. Каждый день узнаю что-то новое для себя.
@robertobokarev439
@robertobokarev439 2 жыл бұрын
Нафига, а главное зачем? Этот язык уже давно дед инсайт
@MagMigo
@MagMigo 2 жыл бұрын
@@robertobokarev439 че несёшь, раст развивающийся и хороший язык
@shrimp4567
@shrimp4567 2 жыл бұрын
Почти все про очевидные вещи, да и не все они фатальны
@vladelcapitan
@vladelcapitan 2 жыл бұрын
В плане типов данных, принимаемых аргументов проблема всех не строго типизированных языков. На Цпп такого не встретить
@T0unFl3it
@T0unFl3it 2 жыл бұрын
Здравствуйте, одна маленькая поправочка: Вы здесь имеете в виду языки со _статической типизацией_, где типы переменных и выражений объявляются программистом или выводятся компилятором. Определение же "строгой/слабой" типизации зависит от сообщества, в котором употребляется. Иногда термин "строгая типизация" используется как синоним статической типизации (как в Вашем комментарии), но есть также и такое (на мой взгляд, лучшее) определение: язык является "строго типизированным", если он не позволяет нарушить собственные абстракции (такие, как типы данных) (по крайней мере, в "безопасных" контекстах). В таком понимании язык Python является строго типизированным языком с динамической типизацией, а C++ является слабо типизированным языком со статической типизацией (т.е., понятия "строгости" и "времени" типизации ортогональны). Просто мои пять копеек, думаю, кому-то будет полезно знать о таких альтернативных определениях ;-)
@artembagachkov933
@artembagachkov933 2 жыл бұрын
Вау, 30к, супер!
@zproger
@zproger 2 жыл бұрын
=)
@iljakot_tran4131
@iljakot_tran4131 2 жыл бұрын
Пусть тебе из множества N возможных лайков, return N[-1]
@ПавелВикторов-п4ю
@ПавелВикторов-п4ю 2 жыл бұрын
Зачет)
@zluka7951
@zluka7951 2 жыл бұрын
дядя Боб для маленьких
@zproger
@zproger 2 жыл бұрын
:)
@mair1735
@mair1735 2 жыл бұрын
почему-то мне вспомнился YANDERE simulator
@zproger
@zproger 2 жыл бұрын
Странно :D
@dnr_8365
@dnr_8365 Жыл бұрын
Странно, ролику больше года и ни одногт лайка?
@smilekun2825
@smilekun2825 6 ай бұрын
Пожалуйста не юзайте списочные выражение с лямбдой на лямбде заправленной условиями и распаковкой. Это буквально криг души и каждый раз хочется орать когда видишь такой код
@printon4087
@printon4087 2 жыл бұрын
Можете порекомендовать ресурс для изучения Python, может книжку какую-то? Оплачивать обучение на данный момент не очень хочу, как минимум потому что мне 15 лет. Смотрел уже 3 бесплатных курса на ютубе, но хочу продвигаться дальше.
@2707B
@2707B 2 жыл бұрын
Sololearn, Проект Эйлера (первые 35 упражнений, дальше больше математика. С какого-то момента сложность резко возрастает, так-что несколько дней на упражнение станет нормой) и если совсем ноль в программировании "Грокаем алгоритмы". Когда добрался до них показались примитивными, но может просто забыл как учился ездить на велосипеде. Дальше гугл, свой проект и возможно Лутц. Лутц это не учебник, а скорее справочник. Читать только чтобы убедиться что ничего не пропустил, и то через год-полтора. Советую так же уже сейчас учить слепую печать. Полотенце на клавиатуру, указательные на пупырки и 30 минут в день месяц-полтора. После такой базы скорость печати вернется на прежний уровень и практику можно будет набивать на бытовом печатании. Сам проходил в 14, когда даже не думал о программировании. Зачем? В темноте не было видно клавиатуры :D Ах да, нулевой язык программирования - английский. Любой интернетный текст в зубы (Литературный носители переусложняют) и переводим гугл-переводчиком слово за словом примечая частые. Первые 50 часов ничего в голове задерживаться не будет, и это нормально. И не стоит гнаться за "100%" английским. Его не бывает. Игровой, ютуберный, программисткий, математический английские - выбери кусочки и все. По своему опыту так же скажу, что чтение можно выучить в вакууме. Произношение, слух и разговор можно отложить лет до 20. Так же для мотивации идеально подойдут уроки. В 9 классе за вами как раз перестанут следить, если не уже. Ну и бонус за простыню. Написано так ясно, что переводчик переводит как с русского на русский: betterexplained.com/articles/a-visual-intuitive-guide-to-imaginary-numbers/
@ai-katrin
@ai-katrin Жыл бұрын
Тут бы зашел тикто надо вот так
@АнтонК-м8о
@АнтонК-м8о Жыл бұрын
При чём тут пайтон? Данные рекомендации относятся к большинству языков программирования
@zproger
@zproger Жыл бұрын
Согласен, но примеры именно на Python, поэтому назвал видео таким образом.
@АнтонК-м8о
@АнтонК-м8о Жыл бұрын
​@@zproger Да, это понятно. Просто точно такие же темы обсуждаются в других языках программирования и точно так же не указывается что это общие правила программирования. Но понравилось чьё-то высказывание: "Самое главное и самое сложное в программировании- правильно назвать функцию".
@David_USA
@David_USA 2 жыл бұрын
Пожалуйста, ТАЙМ-КОДЫ!
@RoKivals
@RoKivals 2 жыл бұрын
Во второй ошибке (про уникальность имён функций и конфликт с другими либами) откровенно говоря бред. По вашей логике, человек при подключении библиотек должен прочитать абсолютно все ее функции и их имена, чтобы не повториться, вместо того чтобы просто нормально импортировать. Да и вообще можно было приличия ради добавить, как решить проблему ссылочного типа в аргументе
@zener_blitz
@zener_blitz 2 жыл бұрын
IDE подскажет если ты перезапишешь функцию из модуля это раз. Как правило в модулях просто функций нет, есть только методы внутри класса это два. Скорее речь шла о ваших собственных модулях. Не используйте wildcard import это три)
@ИванГолышев-с6д
@ИванГолышев-с6д 2 жыл бұрын
Спасибо, огромное за такие ролики, жалко, что ты не можешь сравниться с активностью с миллиониками которые снимают говно контент
@zproger
@zproger 2 жыл бұрын
Ну я выпускаю видео каждые 7 дней, за ~3 года ни разу не отошел от этих сроков =)
@alfobarasovich55
@alfobarasovich55 2 жыл бұрын
@@zproger смотрю тебя как аниме сериал еженедельно ждя новые серии :D
@zproger
@zproger 2 жыл бұрын
:D
@ИванГолышев-с6д
@ИванГолышев-с6д 2 жыл бұрын
@@zproger имелось ввиду активностью на канале: просмотры, лайки и т.п.
@zproger
@zproger 2 жыл бұрын
А, ну если снимать гавно то тоже будет активность большая) Но мне не интересно такое снимать
@ХристяДаревич
@ХристяДаревич Жыл бұрын
корисно
@zproger
@zproger Жыл бұрын
Спасибо!
@stepandemin5836
@stepandemin5836 2 жыл бұрын
Ничего полезного. Очередной говнокод от виндузяшника
@zproger
@zproger 2 жыл бұрын
ну не смотрите тогда, никто не заставляет
@Dark161161
@Dark161161 2 жыл бұрын
Грамотно
@zproger
@zproger 2 жыл бұрын
Благодарю
@TePeM
@TePeM 2 жыл бұрын
А ещё, когда опорожняетесь- снимайте штанишки. Для кого этот мануал? Я без негатива к автору, просто интересно- есть люди, которые изучают синтаксис/продвинутый уровень и для них это не очевидно?
@4aidze
@4aidze 2 жыл бұрын
угу, знаю таки, кодят как орки, знают кучу языков и фреймворков
@4aidze
@4aidze 2 жыл бұрын
и не один не используют нормально
@red__floyd
@red__floyd 2 жыл бұрын
ПОЧЕМУУУУ ФУНЦИЯ?????
@MagMigo
@MagMigo 2 жыл бұрын
Что
@nakidai
@nakidai 2 жыл бұрын
Потому, что не процедура
18 Фишек Python о которых мало кто говорит
14:13
We Attempted The Impossible 😱
00:54
Topper Guild
Рет қаралды 56 МЛН
10 признаков того, что вы новичок в Python
4:59
Как выучить Python БЫСТРО используя ChatGPT?
10:10
Оператор "is" Python сложнее, чем вы думаете
11:02