LINUX.ORG.RU

Есть ли годные гайды по стилю для питона

 , ,


1

2

Я внезапно осознал, что толком не могу сформулировать, какие фичи питона стоит использовать, а какие — нет (как в последнем треде по крестам). Ситуация усложняется тем, что нынче каждая вторая собака считает себя гуру питона и готова учить других, но только единицы умеют по-настоящему хорошо пользоваться языком. Я могу открыть очередную сессию экспертов LOR следующими правилами:

  • Не используй monkey patching (изменения классов и функций в процессе работы приложения) без крайней необходимости;
  • Не используй классы, если это не навязывает библиотека и тебе не нужно переопределить операторы, предпочитай duck typing. Следствие — статическая типизация в питоне не работает;
  • Лямбды — говно, и функциональная парадигма в питоне близка к неюзабельности из-за трудности передачи блока кода аргументом. Язык изначально ориентирован именно на импертивный код аля «башпортянка», потому предпочитай list comprehension/generator expression вместо filter-map;
  • Предпочитай пересоздавать простые значения с нужным типом, а не передавать их как есть или по ссылке. При изменении значения ячейки используй новые значения, а не изменяй старые обьекты. Под капотом CPython уже создает-высвобождает объекты на каждый чих. Создать строку из строки в питоне стоит примерно ничего, но если внезапно вместо строки подвернется непонятный тип или None, то код рискует свалиться со стэком в неожиданном месте.

PS: мои прошлые работы по теме, которые дают советы «как не делать», но не дают советов «что же делать»:

Объектная модель питона
https://habr.com/ru/post/481782/ - О проблемах транслятора Python и переосмысление языка

Перемещено leave из talks



Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от menangen

расширении языка Си с помощью прототипов

Ну, теоретически, взял, «пропатчил» функцию по ссылке...

Shadow 👍👍👍👍👍
()
Ответ на: комментарий от Shadow

Правильный ответ: если проект становится настолько большим, что с типами возникают проблемы, то используй аннотации и тайпчекер

А лучше аннотировать вообще всегда, независимо от размера проекта. Потому что проекты имеют свойство вырастать и чтобы не аннотировать судорожно уже написанный код, просто заведи привычку аннотировать всегда. Оно так же и в качестве документации работает в какой то степени.

eternal_sorrow 🤡🤡🤡
()
Последнее исправление: eternal_sorrow (всего исправлений: 2)
Ответ на: комментарий от anonymous

функциональщина не нужна

Как скажете, но ООП там такое же развитое, как и функциональщина. И ладно бы питонисты писали процедурно в лоб как на паскале. Но нет, они слишком умные, у них классы имеются (так они считают), и метаклассы даже ёпта.

bread 😊😊😊😊
()
Ответ на: комментарий от eternal_sorrow

чтобы не аннотировать судорожно уже написанный код

А смысл писать что-то с нуля на питоне кроме скриптов? А если не с нуля, то код обычно написан давно, ещё до шизы с типизацией. Так что придется таки судорожно анонировать, либо забить.

bread 😊😊😊😊
()

А кто на форуме самый уважаемый Питон?

anonymous
()

Краткий гайд по пытхону: "выкиньте это дерьмо и пользуйтесь нормальным языком программирования"!

anonymous
()

Есть ли годные гайды по стилю для питона

актуальненько. И надо. Иначе изменение расстановки invisible способно поменять суть программы.

нужен общий стиль пустот

MKuznetsov 👍👍👍
()
Ответ на: комментарий от chenbr0

Ни за что. Если его не брать для задач, для которых он не подходит, хэйтить его не за что. Но ведь берут... И тогда они придумывают стероиды для питона, чтобы всё равно брать. А виноват питон. Примерно так же, как жопоскрипт - вся вина в его популярности.

Virtuos86 👍
()
Ответ на: комментарий от bread

А смысл писать что-то с нуля на питоне кроме скриптов

А на чем писать скажем бэк для веб-приложеньки? На сишке что-ли? Или на недорасте? Там выбор либо пистон либо нода. Ну или жаба есть хочется ъ.

upcFrost
()
Ответ на: комментарий от chenbr0

Думаю, за то, что он подстать «до-диезу»: кроме убогих вантузоидов никому нафиг не нужен!

anonymous
()
Ответ на: комментарий от upcFrost

GOLANG - специально для хайлоад бэкенда.

anonymous
()

Я бы еще добавил:

  1. не делать асинхронные скрипты там, где можно обойтись без них. Ощутимо усложняется дебаг на сервере;
  2. использовать аннотации для функций только тогда, когда аннотации типов используются в самом питонячьем коде. На мой взгляд писать аннотации везде -> засорять код мусором
  3. в проекте всегда создавать файл requirements.txt с перечнем используемых сторонних библиотек. Если библиотека взята со стороннего сайта, то добавлять ее прямо в проект, а не делать ссылку на сайт.
dicos
()
Ответ на: комментарий от anonymous

Если не секрет.
Для каких задач Python используете?

Мелкая скриптовуха, тесты. У баша с этим делом по читаемости и отлаживаемости еще большая беда.

byko3y
() автор топика
Ответ на: комментарий от menangen

Мечтаю о расширении языка Си с помощью прототипов, как в Self, Lua, JavaScript - вот это была бы бомба, плюс каналы из Go для многопоточности и более жирная стандартная либа, включающая рантайм и типы для многопоточности аля акторы в Swift

Прототипы как бы подразумевают динамичность. А как ты будешь ее обеспечивать в условиях лютой статики? Тогда уже есть смысл говорить про статичную утиную типизацию или просто обобщения — а это, внезапно, C++, который дает утиную типизацию, если не ограничивать типы шаблонов.

По поводу многопоточности в Swift я недавно отвечал, что это сомнительная затея, потому что на самом деле стандартные инструменты мало что дают помимо N-к-M отображения потоков выполнения к потокам ОС, проблему синхронизация и контроля областей видимости они если и решают, то преступно слабо.

У каналов Go проблема схожа. Самый большой минус в Си в этом плане — это отсутствие возможности простой передачи контекста потока выполнения, то есть, не руками явным аргументом каждой функции в проекте, а автоматически с гибким изменением под разные контексты.

byko3y
() автор топика
Ответ на: комментарий от goingUp

Это не ФП, а только некоторые его элементы, скорее сходство без сути, там не композиция функций, а чейнинг

Это не ФП, а пародия на ФП. Как C++ является пародией на ООП, а MongoDB является пародией на БД. То есть, отдельные признаки подает, но эти признаки ложные.

byko3y
() автор топика
Ответ на: комментарий от upcFrost

Добрый вечер. Датаклассы завезли уже года 3-4 назад
Хороший стиль - typing везде, классы везде...

Я за датаклассы, но против классов — так пойдёт?

в вызовах для каждого аргумента указывать имя

Тоже пришел к этому. Стоимость у такого вызова практически не отличается от стоимости вызова кортежем, а без возможности простой проверки аргументов (пусть в рантайме) переданный аргументами мусор протекает в случайные углы библиотек так, что потом не разберешься, что на самом деле случилось. И самое обидное, когда этот мусор генерируется просто от того, что аргументы поменялись, а вызов функции — нет. Возможности рефакторинга питона печальны, потому каждую функцию нужно вызывать так, будто больше ты этот вызов никогда не изменишь.

Особое зло — это когда разнородные данные-аргументы суют в массивы, аля p[0] = 'argname', p[1] = value, тут нужно руки отрывать по самое лицо.

typing везде

Кстати, что ты под этим имеешь в виду? Раздувать код в два раза только ради того, чтобы дать кодеру подсказки? Проверить их автоматически ты все равно не сможешь, только если не нагнешь кодера раком для обслуживания прихотей анализатора.

byko3y
() автор топика
Ответ на: комментарий от eternal_sorrow

Правильный ответ: если проект становится настолько большим, что с типами возникают проблемы, то используй аннотации и тайпчекер

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

byko3y
() автор топика
Ответ на: комментарий от bread

Как скажете, но ООП там такое же развитое, как и функциональщина. И ладно бы питонисты писали процедурно в лоб как на паскале. Но нет, они слишком умные, у них классы имеются (так они считают), и метаклассы даже ёпта

Бро, а вы пишете на питоне? Первый раз услышал такой тезис на LOR, и я чертовски согласен с ним. А ведь тут сидят опытные питонисты.

Справедливости ради, никаких метаклассов в питоне нет, это пародия на пародию, там по сути одна функция используется для создания класса — и метаклассы таки можно было явно сделать функцей, то есть, «фабрикой классов».

byko3y
() автор топика
Ответ на: комментарий от anonymous

Краткий гайд по пытхону: «выкиньте это дерьмо и пользуйтесь нормальным языком программирования»!

Только ты забыл указать каким.

byko3y
() автор топика
Ответ на: комментарий от Virtuos86

Если его не брать для задач, для которых он не подходит, хэйтить его не за что. Но ведь берут... И тогда они придумывают стероиды для питона, чтобы всё равно брать. А виноват питон. Примерно так же, как жопоскрипт - вся вина в его популярности

«Ты виноват уже тем, что хочется мне кодить» — сказал, и на бэкэнд питона поволок.

byko3y
() автор топика
Ответ на: комментарий от upcFrost

А на чем писать скажем бэк для веб-приложеньки? На сишке что-ли? Или на недорасте? Там выбор либо пистон либо нода. Ну или жаба есть хочется ъ

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

byko3y
() автор топика
Ответ на: комментарий от fernandos

ЛОЛ, нет. Кто даст затюханому ботану людьми руководить то? Руководителю софт скилы надо, а не хард скилы

Эстафета идиотских обобщений?

Тупо наблюдение за миром. К сожалению, функции руководителя подразумевают особенности характера и мировозрения, которые не понятны многим ботанам и очень плохо совместимы с характером отличника. Благо, я таки никогда не был отличником, так что у меня есть шанс.

byko3y
() автор топика
Ответ на: комментарий от dicos

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

Только потому, что убогий питон не умеет в асинхронные стэки. Хотя в них уже много лет умеет тот же JS. К слову о том, что на самом деле питон уже последние 15 лет не развивается, и всё его видимое «развитие» на самом деле представляет собой слои штукатурки, которая периодически отваливается и под ней начинают проглядываться те же кирпичи 20-летней давности.

использовать аннотации для функций только тогда, когда аннотации типов используются в самом питонячьем коде. На мой взгляд писать аннотации везде -> засорять код мусором

Про мусор согласен, а первый тезис не понял — что такие «когда аннотации типов используются в самом питонячьем коде». А есть не сам?

в проекте всегда создавать файл requirements.txt с перечнем используемых сторонних библиотек. Если библиотека взята со стороннего сайта, то добавлять ее прямо в проект, а не делать ссылку на сайт

Это хороший совет в том числе для JS, который спустя годы может внезапно перестать собираться из-за NPM.

byko3y
() автор топика
Ответ на: комментарий от byko3y

Я про то, что сначала один глупо обобщил, а потом другой, опровергая одно глупое обобщение, обобщил ещё раз.

З.Ы.: для питона нет какого-то аналога ПСРов?

Ну и вам не кажется, что просто опыта не хватает?

fernandos
()
Ответ на: комментарий от fernandos

Я про то, что сначала один глупо обобщил, а потом другой, опровергая одно глупое обобщение, обобщил ещё раз.

С юмором у вас НИКАК?

anonymous
()

Есть ли годные гайды по стилю для питона

Щитаю, что Python лучше C++ …

anonymous
()
Ответ на: комментарий от fernandos

Я про то, что сначала один глупо обобщил, а потом другой, опровергая одно глупое обобщение, обобщил ещё раз

Отличник — это очень конкретное четкое мировоззрение. Например, я почти безошибочно могу узнать женщина-отличницу. Они особенные и они очень отличаются.

Ну и вам не кажется, что просто опыта не хватает?

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

byko3y
() автор топика
Ответ на: комментарий от upcFrost

А на чем писать скажем бэк для веб-приложеньки? ... Там выбор либо пистон либо нода. Ну или жаба

Ну вот, уже есть из чего выбрать. И как вы обоснуете выбор питона из этих кандидатов? Любопытно.

bread 😊😊😊😊
()

Я внезапно осознал, что толком не могу сформулировать, какие фичи питона стоит использовать, а какие — нет (как в последнем треде по крестам).

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

SZT
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от byko3y

Справедливости ради, никаких метаклассов в питоне нет, это пародия на пародию

Вот именно. Но там что ни возьми, всё такое.

пишете на питоне?

Когда-то работал с командой индусов, заработал аллергию на питонов (и на индусов). Я вообще с программированием завязал, так что моё мнение очень «ценное». Иногда почитываю код впрочем, и вижу какое у программистов горе от ума. Особенно прикольно собственное творчество рассматривать. Получается примерно такое: https://habr.com/ru/post/75347/

bread 😊😊😊😊
()
Последнее исправление: bread (всего исправлений: 1)
Ответ на: комментарий от Virtuos86

Если его не брать для задач, для которых он не подходит, хэйтить его не за что

Да, в букваре он неплохо смотрится благодаря лаконичному синтаксису.

bread 😊😊😊😊
()

Есть ли годные гайды по стилю для питона

Иногда предлагают использовать Python для разработки прототипов проектов.
Насколько это целесообразно? …

anonymous
()
Ответ на: комментарий от SZT

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

Ололо, под это дело есть Python Shared Objects.

byko3y
() автор топика
Ответ на: комментарий от Virtuos86

И не такой уж лаконичный синтаксис

Вертикально очень компактный. Что и требуется для учебника. Но многовато там скобок конечно, это минус.

bread 😊😊😊😊
()
Ответ на: комментарий от bread

Когда-то работал с командой индусов, заработал аллергию на питонов (и на индусов).

Поверь моему богатому опыту, работая с такой командой ты получишь гарантированную аллергию на любой используемый ЯП.

emorozov 👍👍
()
Ответ на: комментарий от emorozov

Согласен полностью. При этом, как только они увлекаются темой в разговоре - акцент и бульканье начинают преобладать, понять невозможно. А они - я же тебе говорил!

Not_a_Troll
()
Ответ на: комментарий от eternal_sorrow

если в проекте на питоне начинаются проблемы с типами, то перепеши нафиг на ocaml

визуально будут те же стрелочки -> кругом, но типизация честно статическая, и типы на каждый чих писать не надо

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.