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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.