Pull to refresh

Comments 25

UFO just landed and posted this here

Спасибо большое за обратную связь.

А то я по счётчику просмотров вижу, что люди статью читают, но плюсиков почему-то не прибавляется, что, конечно, несколько демотивирует. Пока не пойму, то ли статья слабовата, то ли с форматом (длинновато получилось) не угадал.

Хорошая статья, и хорошо, что в одном месте, но если это вдумчиво читать, тут несколько дней нужно.

Я подумывал разбить на кусочки, но заметил, что статьи с названиями типа "Что-то годное, часть 2" читают не очень охотно.

К тому же у меня нет канала в Телеграм, на который я мог бы вставлять много ссылок из большого количества статей :), так что я решил одним большим куском опубликовать.

Или я чего-то не понял, или здесь ошибочка.

А вообще статья годная. Мне, как ненастоящему сварщику junior-у пригодится, например.

Какая взаимосвязь между датой/временем и encode/decode, и при чем тут math?

Вот небольшая выжимка из прекрасного cheatsheet по Python (номер два в моём списке источников в конце статьи, сразу после официальной документации):

Encode
<D/T/DT> = D/T/DT.fromisoformat('<iso>')    # Object from ISO string. Raises ValueError.
<DT>     = DT.strptime(<str>, '<format>')   # Datetime from str, according to format.
<D/DTn>  = D/DT.fromordinal(<int>)          # D/DTn from days since the Gregorian NYE 1.
<DTn>    = DT.fromtimestamp(<real>)         # Local time DTn from seconds since the Epoch.
<DTa>    = DT.fromtimestamp(<real>, <tz.>)  # Aware datetime from seconds since the Epoch.

Decode
<str>    = <D/T/DT>.isoformat(sep='T')      # Also `timespec='auto/hours/minutes/seconds/…'`.
<str>    = <D/T/DT>.strftime('<format>')    # Custom string representation.
<int>    = <D/DT>.toordinal()               # Days since Gregorian NYE 1, ignoring time and tz.
<float>  = <DTn>.timestamp()                # Seconds since the Epoch, from DTn in local tz.
<float>  = <DTa>.timestamp()                # Seconds since the Epoch, from aware datetime.

Arithmetics
<D/DT>   = <D/DT>  ± <TD>                   # Returned datetime can fall into missing hour.
<TD>     = <D/DTn> - <D/DTn>                # Returns the difference, ignoring time jumps.
<TD>     = <DTa>   - <DTa>                  # Ignores time jumps if they share tzinfo object.
<TD>     = <TD>    * <real>                 # Also: <TD> = abs(<TD>) and <TD> = <TD> ±% <TD>.
<float>  = <TD>    / <TD>                   # How many weeks/years there are in TD. Also //.

Ухх. Супер! Не знал :) Благодарю!

Даже если что-то пойдет не так, как задумано (например, вы не обработаете исключение во время работы с файлом), менеджер контекста «зачистит хвосты», и ваша оплошность не отразится, например, на файловой системе.

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

Нет, это не работает как транзакция. При ошибке изменения не откатываютя.

Да, забыл поставить /sarcasm

Спасибо за труд, как раз знакомлюсь с пайтоном

Михаил, спасибо огромное за проделанную работу! Отличный материал, чтобы освежить знания о Python и заполнить пробелы.

Спасибо за материал. Видно, что в него вложен большой труд.

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

Очень показательно выглядят деревья – описаны раньше строк (/начинающие закрыли страницу/), и по объёму раскрытия вместе эквивалентны базовым строковым методам (/продолжающие ушли в гугл, в хорошем исходе/).

Могло бы помочь дополнительное введение уровней, для каждого пункта, хотя бы "начинающим / продолжающим / углубляющимся". И согласовать степень раскрытия пункта под каждый уровень. Здесь, как раз, можно подумать о дроблении на разные статьи, так как в формате "всё-в-одном" материал тогда вырастет ещё раза в два, как минимум, а читатели утонут в проскроллах не своих уровней. Можно для сокращения текста сопровождать ссылками на прочие статьи, так как все пункты, по отдельности, уже не раз описаны.
Уровни на диаграммах я в расчёт не беру – они никак не отражены в тексте. Да и дробления на два уровня явно недостаточно – те же метаклассы оказываются на одном уровне с Counter, dict comprehension и @cache (специально взял примеры из разных разделов).

Ну и само дробление на разделы… оно-то и логично категоризировано, но последовательность изложения/чтения от этого сильно страдает.

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

Спасибо за развёрнутый комментарий!

В предыдущем материале (https://habr.com/ru/articles/697760/) я пытался составить небольшой путеводитель, придавая ему некоторой универсальности цветовой дифференциацией тем.

В текущей статье я изначально хотел расписать только "зеленые" темы (для начинающих), но потом как-то слегка залип и стал строчить про всё подряд.

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

ЦА статьи - готовящиеся к тех собеседованию, или проходящие его.
Курсы и учебники для начинающих нужно уметь писать. Нужно уметь создавать иллюзию у начинающих, что за 2-3 месяца умственных усилий у них будет зарплата в 120.

Ох и работу вы проделали, вы титан. В закладки однозначно.

окинул взглядом... может, ну его нафиг, в С++ вернуться...

тут недавно был роадмап по плюсам =)

самая толковая статья про пайтон, что я читал на русском

Колоссальная работа! Есть что узнать, даже будучи профессионалом!

Весьма полезная статья! Стоит отметить!

Sign up to leave a comment.

Articles