Друзья,
Вы наверно слышите кругом всё говорят Питоон Питооон.
А вы знаете что если там какие то табы с пробелами не выровнены, но питон скрипт не запустится вообще?
Погуглите ошибку "TabError: inconsistent use of tabs and spaces in indentation"
Это аструеть ...
Здравствуйте, Bill Baklushi, Вы писали:
BB>>>А если набрать в питоновой консоли набрать просто exit, питон скажет — "я вас понял. не хочу. попросите вежливо и синтаксически корректно". N>>Нормальные юниксоеды знают про Ctrl+D с виртуальных пелёнок N>>А кто не может такое нажать, а хочет набирать exit... ipython умеет такое и ещё тонны плюшек, так что пусть идёт на ipython вместо стандартного шелла.
BB>Мой коммент не об этом. А о том, что очевидные конструкции запрещены.
Очевидная конструкция это Ctrl+D. Как для любого интерактивного шелла.
Но таки для таких любителей ХЗ чего в ipython привернули костыль.
BB>Запрещены ради манерного кривляния. Т.к. каких либо концепций в питоне нет, есть гора помоев.
Гора помоев — в твоей голове, то есть в твоём представлении о нём. Ты даже не пытаешься понять, что и почему там сделано, и пропускаешь самые серьёзные проблемы питона, вцепляясь в сущие мелочи.
Это отсеивает «непосвященных» от МАГИИ. Смотрит непосвященный на два одинаковых текста и не врубается, почему один запускается, а другой — нет. И тут в дело вступает МАГИЯ ПУСТОТЫ, ЭНЕРГИЯ ВАКУУМА, КОЛИЧЕСТВО ПРОБЕЛОВ.
Здравствуйте, кубик, Вы писали:
К>А вы знаете что если там какие то табы с пробелами не выровнены, но питон скрипт не запустится вообще?
И это, блин, супер. В результате в коде будет хотя бы нормальное форматирование гарантировано. А то в свое время был охрененный скандал, когда я взял, и отформатировал проект, в котором форматирования не было вообще. Вернее оно было, но неправильное. Что то вроде:
for (i in 1..10)
{
if (a>5)
{
printf("h")
printf("e")
printf("l")
printf("l")
printf("o")
}
}
Очень хорошо, что есть хотя бы один язык, в котором ни одна сволочь физически не сможет вот такое сделать, и ни одна сволочь не сможет запретить такой капец исправлять!
PS еще б на уровне языка ограничить бы длину вложенности отступов хотя бы до 6 (а то некоторые таланты и 50 хреначат), а длину функции хотя бы 500 строчками (а то некоторые орлы все пишут в main на 20 000 строк и без форматирования), вообще бы цены такому языку не было. К сожалению python от такого не спасает.
N>В случае {} или begin end перейти на противоположную легко в нормальном редакторе (vim — %, Jetbrains IDE — Ctrl+Shift+M, и так далее). А тут сразу начинается выбор, куда переходить — а подсказок не дают (пожаловаться что ли в Jetbrains?)
Здравствуйте, кубик, Вы писали:
К>Это аструеть ...
Ну так а мы про что! Ещё с самой первой заметки про Пестон я был в таком же аструевшем состоянии Как можно в 21 веке делать синтаксис на отступах?! Это ж вам не 70-ые, когда безумные идеи воплощал каждый школотрон!
И "заимствование кода" (особенно из ЧАСТИЧНЫХ конструкций) — попробуй скопипасти пару кусков из браузера — сдохнешь восстанавливавши! Этот пестон — мракобесие и видимо, индикатор тех, кого пора лечить.
Здравствуйте, Pzz, Вы писали:
К>>Погуглите ошибку "TabError: inconsistent use of tabs and spaces in indentation" К>>Это аструеть ...
Pzz>Ну, с пробуждением тебя!
Скорее с разморозкой. Это ж сколько надо было спать, и не заметить ещё десяток языков с похожими свойствами...
Здравствуйте, Bill Baklushi, Вы писали:
К>>А вы знаете что если там какие то табы с пробелами не выровнены, но питон скрипт не запустится вообще? К>>Погуглите ошибку "TabError: inconsistent use of tabs and spaces in indentation"
BB>А если набрать в питоновой консоли набрать просто exit, питон скажет — "я вас понял. не хочу. попросите вежливо и синтаксически корректно".
Нормальные юниксоеды знают про Ctrl+D с виртуальных пелёнок
А кто не может такое нажать, а хочет набирать exit... ipython умеет такое и ещё тонны плюшек, так что пусть идёт на ipython вместо стандартного шелла.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, кубик, Вы писали:
К>>elmal, этот беспорядок легко отформатировать. Например в студии выделил и Ctrk-K, Ctrl-F E>Легко, но когда я один раз так сделал, скандал был неимоверный и было требование вернуть все как было, мы так привыкли. Вот чтоб не привыкали жить в дерьме, было б неплохо не давать разводить явное дерьмо на ровном месте физически.
Ты смешиваешь разные вещи: 1) сама необходимость порядка (на разных уровнях), 2) договорённость о нём и 3) согласованность и разрешение усилий по его наведению.
Фактически, насколько можно понять по твоему рассказу, внутренних норм вообще не было. И тут приходишь ты и начинаешь их устанавливать. В истории появляется изменение непонятно зачем... и что?
По-нормальному это делается так:
1. Добивается общего согласия (хотя бы устного) про "так жить нельзя (плохо), надо навести порядок". Сильно может помочь наблюдение ситуации типа — функцию foo() Вася правил и переформатировал под себя, Петя пришёл и переформатировал под себя, Вася снова пришёл и переформатировал обратно — в результате в истории бардак, диффы нечитаемы.
2. Делается прикидка варианта правильного порядка. Лучше на основании какой-то автотулзы — тогда избавление от ручного контроля перевешивает для большинства проблему подчинения того, что им в чём-то не нравится. Обычно, кто опытнее, легче терпит — и больше насмотрелся разного, и понимает цену экономии усилий. Можно обсудить тонкие настройки.
3. Делается проба (лучше в отдельной ветке), всё переформатируется, просматривается результат на предмет явных ляпов. Если нужно, настройки корректируются и проба повторяется.
4. Результат закрепляется административно ("всем прогонять через форматтер") и желательно технически (commit hook + контроль в CI).
причём обычно каждый шаг надо делать в 3-4 захода (на первом тебя только слышат, на втором кто-то задумывается, на третьем реагирует большинство). Хотя, если ты техлид, можешь просто настоять от себя (но лучше тоже плавно).
И:
1. Это касается не только форматирования и отступов: могут быть сотни других особенностей (стиль именования, выделение всяких геттеров, вплоть до архитектурных решений типа кто к кому обращается и как идёт поток данных... только их уже сложно автоматизировать).
2. Дело не в Python, Go или ком ещё: на каждом из них можно натворить тонны безобразий. Python контролирует, чтобы во всём блоке была одинаковая последовательность пробелов и табуляций в качестве отступов (Py3 — жёстко, Py2 — чуть свободнее), но, например, ему плевать на собственно количество отступов на блок (1, 2, 7, 19 — пофиг), на длину отступа на каждом явном продолжении строки (лишь бы не меньше начала строки), на пробелы потом ("a,b", "a, b", "a, b" — ему одинаково). Линтеры и форматтеры можно обучить контролю и исправлению, но это таки за пределами требований языка, а анноить они могут не меньше.
Здравствуйте, Homunculus, Вы писали:
H>Это отсеивает «непосвященных» от МАГИИ. Смотрит непосвященный на два одинаковых текста и не врубается, почему один запускается, а другой — нет. И тут в дело вступает МАГИЯ ПУСТОТЫ, ЭНЕРГИЯ ВАКУУМА, КОЛИЧЕСТВО ПРОБЕЛОВ.
Здравствуйте, Homunculus, Вы писали:
Pzz>>qнεиж ʎmɐн ʚ ʁиεɐdƍоонεɐd ɯǝʁvʚɐƍоɓ ǝpoɔıun и ɐɓ
H>Это фраза, читаемая на телефоне и нечитаемая (ну, или с некоторыми проблемами) на мониторе
Можно голову крутить, а не монитор. Это даже полезно для шеи.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, кубик, Вы писали:
К>>А вы знаете что если там какие то табы с пробелами не выровнены, но питон скрипт не запустится вообще? E>И это, блин, супер. В результате в коде будет хотя бы нормальное форматирование гарантировано. А то в свое время был охрененный скандал, когда я взял, и отформатировал проект, в котором форматирования не было вообще. Вернее оно было, но неправильное. Что то вроде:
Я на самом деле после вот уже 16 лет почти непрерывной работы с Питоном не уверен, что это так уж хорошо, но не из-за выравнивания как такового, а из-за того, что сложно отловить по точке закрытия нескольких блоков сразу — где они начинаются.
В случае {} или begin end перейти на противоположную легко в нормальном редакторе (vim — %, Jetbrains IDE — Ctrl+Shift+M, и так далее). А тут сразу начинается выбор, куда переходить — а подсказок не дают (пожаловаться что ли в Jetbrains?)
И когда код вида
if x:
while y:
for z in zzz:
if abc123 + zyx456 < qwer789:
... что-то происходит ...
else:
тут (перед else в примере) ты не знаешь, что было, как и почему — может, ты досматривал, что было в for z?
Против этого два средства:
1. Не создавать код размером больше экрана. Часто действует, но не всегда — у меня есть такие случаи, когда если по всем правилам Мартина сделать, то будет замедление в 10-100 раз, не могу себе позволить. Неизбежно получаются монстры на пятьсот строк.
2. В конце каждого такого блока писать свои пометки, типа:
if x:
while y:
for z in zzz:
if abc123 + zyx456 < qwer789:
... что-то происходит ...
#end if
#end for
#end whileelse:
но их ещё расставить надо и согласовать с командой. Ну и какое-то средство для быстрого перехода (в vim есть indentwise, очень вкусно).
E>PS еще б на уровне языка ограничить бы длину вложенности отступов хотя бы до 6 (а то некоторые таланты и 50 хреначат), а длину функции хотя бы 500 строчками (а то некоторые орлы все пишут в main на 20 000 строк и без форматирования), вообще бы цены такому языку не было. К сожалению python от такого не спасает.
Тут интересен подход Go — общий стиль форматирования не обязателен, но наличие одной универсальной тулзы в коробке и одного стиля на неё нормирует хотя бы публичный код (а не 100500 стилей, как в C).
кубик:
К>А вы знаете что если там какие то табы с пробелами не выровнены, но питон скрипт не запустится вообще? К>Погуглите ошибку "TabError: inconsistent use of tabs and spaces in indentation"
А если набрать в питоновой консоли набрать просто exit, питон скажет — "я вас понял. не хочу. попросите вежливо и синтаксически корректно".
Модератор-националист Kerk преследует оппонентов по политическим мотивам.
netch80:
BB>>А если набрать в питоновой консоли набрать просто exit, питон скажет — "я вас понял. не хочу. попросите вежливо и синтаксически корректно". N>Нормальные юниксоеды знают про Ctrl+D с виртуальных пелёнок N>А кто не может такое нажать, а хочет набирать exit... ipython умеет такое и ещё тонны плюшек, так что пусть идёт на ipython вместо стандартного шелла.
Мой коммент не об этом. А о том, что очевидные конструкции запрещены.
Запрещены ради манерного кривляния. Т.к. каких либо концепций в питоне нет, есть гора помоев.
Модератор-националист Kerk преследует оппонентов по политическим мотивам.
Здравствуйте, Kolesiki, Вы писали:
K>И "заимствование кода" (особенно из ЧАСТИЧНЫХ конструкций) — попробуй скопипасти пару кусков из браузера — сдохнешь восстанавливавши!
Хм! А ведь неплохая фича, на самом деле!
Здравствуйте, кубик, Вы писали:
К>Друзья, К>Вы наверно слышите кругом всё говорят Питоон Питооон. К>А вы знаете что если там какие то табы с пробелами не выровнены, но питон скрипт не запустится вообще? К>Погуглите ошибку "TabError: inconsistent use of tabs and spaces in indentation" К>Это аструеть ...
А ещё есть Haskell, представляешь, в нём то же самое. И ещё десяток похожих языков. А ещё есть YAML.
А ещё есть, о ужас, email, HTTP, SIP, в которых продолжение поля заголовка требует пробелов отступа.
А ещё всякие Markdown (ты документацию к коду совсем не пишешь?)
Мы не виноваты, что ты уснул где-то в 1997-м и только сейчас проснулся, но зачем всех остальных пугать своими личными привидениями?
(Кстати, ты явно уснул не раньше. Потому что есть классический Fortran.)
Здравствуйте, elmal, Вы писали:
E>Очень хорошо, что есть хотя бы один язык, в котором ни одна сволочь физически не сможет вот такое сделать, и ни одна сволочь не сможет запретить такой капец исправлять!
Да ладно, не сможет. Препроцессор что ли долго соорудить?
E>PS еще б на уровне языка ограничить бы длину вложенности отступов хотя бы до 6 (а то некоторые таланты и 50 хреначат), а длину функции хотя бы 500 строчками (а то некоторые орлы все пишут в main на 20 000 строк и без форматирования), вообще бы цены такому языку не было. К сожалению python от такого не спасает.
Иногда такие вещи результат автоматической генерации.
Здравствуйте, Michael7, Вы писали:
N>>Скорее с разморозкой. Это ж сколько надо было спать, и не заметить ещё десяток языков с похожими свойствами...
M>Из широко распространенных кроме питона даже не припомню еще. Не считать же за такие свойства старый перфокарточный Фортран.
Фортран я уже упомянул рядом, да. Ну ещё есть пачка форматов данных (как заголовок HTTP).
Хотя там проще — там требуется (или запрещается) минимум один пробел или табуляция, а не точный их набор.
N>Фортран я уже упомянул рядом, да. Ну ещё есть пачка форматов данных (как заголовок HTTP). N>Хотя там проще — там требуется (или запрещается) минимум один пробел или табуляция, а не точный их набор.
Ты еще в другом сообщении напомнил про Haskell, я о нем как-то не вспомнил, когда писал. Правда можно ли его считать широко распространенным — вопрос. Но в нем емнип и не так все же жестко как в питоне.
Здравствуйте, netch80, Вы писали:
N>В случае {} или begin end перейти на противоположную легко в нормальном редакторе (vim — %, Jetbrains IDE — Ctrl+Shift+M, и так далее). А тут сразу начинается выбор, куда переходить — а подсказок не дают (пожаловаться что ли в Jetbrains?)
Пожалуйся, кстати, точнее заведи feature request. Я как то захотел одну фичу, сообщил разработчикам — очень оперативно сделали.
Здравствуйте, Michael7, Вы писали:
M>Здравствуйте, netch80, Вы писали:
N>>Скорее с разморозкой. Это ж сколько надо было спать, и не заметить ещё десяток языков с похожими свойствами...
M>Из широко распространенных кроме питона даже не припомню еще. Не считать же за такие свойства старый перфокарточный Фортран.
Помню, у меня CGI-скрипт на perl не работал. Хелло-ворлд предельно сложен по сравнению с этим скриптом. По букве сверили — у друга работает, у меня нет. Оказалось, там CR/LF как окончание строки — а ожидался UNIX-подход (LF only).
Здравствуйте, netch80, Вы писали:
N>Тут интересен подход Go — общий стиль форматирования не обязателен, но наличие одной универсальной тулзы в коробке и одного стиля на неё нормирует хотя бы публичный код (а не 100500 стилей, как в C).
ClangFormat же почти универсальная тулза из коробоки для мира С/C++, со стандартами хуже, но boost и Qt стили вполне хорошо документированы и стандартизированны.
Здравствуйте, Michael7, Вы писали:
M>Из широко распространенных кроме питона даже не припомню еще. Не считать же за такие свойства старый перфокарточный Фортран.
Из достаточно распространненных:
языки разметки — YAML, makefile, markdown, scss
языки программирования — haskell, например
К>Вы наверно слышите кругом всё говорят Питоон Питооон. К>А вы знаете что если там какие то табы с пробелами не выровнены, но питон скрипт не запустится вообще? К>Погуглите ошибку "TabError: inconsistent use of tabs and spaces in indentation" К>Это аструеть ...
Если не писать в блокноте, то это за тебя делает ИДЕ. Так что не вижу проблемы.
Иногда трудно понять что и где, если кода на много простыней. Но это зло в принципе.
Здравствуйте, netch80, Вы писали:
N>В случае {} или begin end перейти на противоположную легко в нормальном редакторе (vim — %, Jetbrains IDE — Ctrl+Shift+M, и так далее). А тут сразу начинается выбор, куда переходить — а подсказок не дают (пожаловаться что ли в Jetbrains?)
Поищи опцию show indent guides
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
В>>Если не писать в блокноте, то это за тебя делает ИДЕ. Так что не вижу проблемы.
УП>Только вот просто так вставить код не из проекта, а, например, с сайта, не всегда получится.
Здравствуйте, Bill Baklushi, Вы писали:
BB>А если набрать в питоновой консоли набрать просто exit, питон скажет — "я вас понял. не хочу. попросите вежливо и синтаксически корректно".
Потому что, все, что ты вводишь в REPL — это часть программы (скрипта). Выполняется эта программа по мере ввода новых строк.
exit — не валидная строка в скрипте. Поэтому питон подсказывает начинающим питон-программерам, как правильно писать строку программы.
В целом, действительно, раздражает. Но не ужас, ужас.
Здравствуйте, ути-пути, Вы писали:
N>>В случае {} или begin end перейти на противоположную легко в нормальном редакторе (vim — %, Jetbrains IDE — Ctrl+Shift+M, и так далее). А тут сразу начинается выбор, куда переходить — а подсказок не дают (пожаловаться что ли в Jetbrains?)
УП>Поищи опцию show indent guides
Вручную трекать по этим полоскам, вместо нормального быстрого перехода? Если у тебя лишнее время, вперёд. Я же просил нормальную реализацию.
ути-пути:
В>>Если не писать в блокноте, то это за тебя делает ИДЕ. Так что не вижу проблемы. УП>Только вот просто так вставить код не из проекта, а, например, с сайта, не всегда получится.
Кстати да. Копипаста на нормальных языках работает "из коробки" с любым уродским оформлением.
Питоновую копипасту нужно вручную переформатировать, а часто и переотлаживать (т.к. из-за лишних/недостающих пробелов неизбежно появятся баги).
Модератор-националист Kerk преследует оппонентов по политическим мотивам.
Здравствуйте, Буравчик, Вы писали:
N>>В случае {} или begin end перейти на противоположную легко в нормальном редакторе (vim — %, Jetbrains IDE — Ctrl+Shift+M, и так далее). А тут сразу начинается выбор, куда переходить — а подсказок не дают (пожаловаться что ли в Jetbrains?)
Б>https://www.jetbrains.com/help/pycharm/navigation-in-source-code.html
Б>Navigate to Opening Brace — Ctrl+[ (срабатывает только если курсор стоит в начале строки, не знаю почему) Б>Navigate to Closing Brace — Ctrl+]
У меня сейчас PyCharm community 2020.2. Ограничением началом строки нет, а так — похоже: если эта строка — последняя сразу в нескольких блоках разной уровневости, переводит по Ctrl+[ на if/for/etc. самого внутреннего блока, с неё — более внешнего, и так далее.
Ctrl+] переводит, если стоим на блоковом операторе, на последнюю строку тела этого блока.
Ну, в качестве достаточной (хоть и не точной) замены моей хотелке подходит: можно поперебирать позиции, пока не дойдёшь до нужной... ok, пусть так будет.
(Видимо, не было, когда пробовал в прошлый раз, или не решил из-за слова brace, что оно работает и для Питона.)
Здравствуйте, netch80, Вы писали:
N>(Кстати, ты явно уснул не раньше. Потому что есть классический Fortran.)
А что не так с классическим Fortran? У него вообще фиксированный формат был. ЕМНИП, 5 позиций для метки, 6-я — символ продолжения, с 7-й по 72-ю — текст. Сейчас сделали свободный формат, я его читать не могу.
Здравствуйте, Privalov, Вы писали:
N>>(Кстати, ты явно уснул не раньше. Потому что есть классический Fortran.)
P>А что не так с классическим Fortran? У него вообще фиксированный формат был. ЕМНИП, 5 позиций для метки, 6-я — символ продолжения, с 7-й по 72-ю — текст. Сейчас сделали свободный формат, я его читать не могу.
Ну недопиши пару пробелов в начале, будет интересный эффект
Здравствуйте, elmal, Вы писали:
E>И это, блин, супер. В результате в коде будет хотя бы нормальное форматирование гарантировано. А то в свое время был охрененный скандал, когда я взял, и отформатировал проект, в котором форматирования не было вообще. Вернее оно было, но неправильное. Что то вроде:
elmal, этот беспорядок легко отформатировать. Например в студии выделил и Ctrk-K, Ctrl-F
А в питоне, я так понимаю, какой отступ ты сделал в такой блок код и попал. От этого зависит логика.
Здравствуйте, кубик, Вы писали:
К>elmal, этот беспорядок легко отформатировать. Например в студии выделил и Ctrk-K, Ctrl-F
Легко, но когда я один раз так сделал, скандал был неимоверный и было требование вернуть все как было, мы так привыкли. Вот чтоб не привыкали жить в дерьме, было б неплохо не давать разводить явное дерьмо на ровном месте физически.
Здравствуйте, elmal, Вы писали:
E>Легко, но когда я один раз так сделал, скандал был неимоверный и было требование вернуть все как было, мы так привыкли. Вот чтоб не привыкали жить в дерьме, было б неплохо не давать разводить явное дерьмо на ровном месте физически.
Потому что стиль кодирования устанавливается для всей команды.
Это вопрос договоренностей и компромисов.
Здравствуйте, netch80, Вы писали:
N>Ну недопиши пару пробелов в начале, будет интересный эффект
Этим нас не напугаешь. Мы в свое время учили, как не надо писать на Фортране. Поэтому позиции отсчитывали на автомате. Позже я вообще пробелы начал вставлять везде, где они, по идее, не нужны. Например, в конструкции IF (A .EQ. B) GO TO 10 большую часть пробелов (если не вообще все, не помню) можно убрать. Я, скорее, со свободным форматом накосячу. Никогда его не использовал.
Здравствуйте, elmal, Вы писали:
К>>elmal, этот беспорядок легко отформатировать. Например в студии выделил и Ctrk-K, Ctrl-F E>Легко, но когда я один раз так сделал, скандал был неимоверный и было требование вернуть все как было, мы так привыкли.
И при чем тут язык? Идиоты и на Петоне могут наворотить такого, что мало не покажется.
E>Вот чтоб не привыкали жить в дерьме, было б неплохо не давать разводить явное дерьмо на ровном месте физически.
VB (старый, додотнетный) — твой идеал, там даже редактор не даст с отступами накосячить.
Здравствуйте, Homunculus, Вы писали:
Pzz>>qнεиж ʎmɐн ʚ ʁиεɐdƍоонεɐd ɯǝʁvʚɐƍоɓ ǝpoɔıun и ɐɓ H>Это фраза, читаемая на телефоне и нечитаемая (ну, или с некоторыми проблемами) на мониторе
Здравствуйте, кубик, Вы писали:
К>Друзья, К>Вы наверно слышите кругом всё говорят Питоон Питооон. К>А вы знаете что если там какие то табы с пробелами не выровнены, но питон скрипт не запустится вообще? К>Погуглите ошибку "TabError: inconsistent use of tabs and spaces in indentation" К>Это аструеть ...
Ваааще! Спасибо, что предупредил! Аж пот холодный прошиб...
Здравствуйте, elmal, Вы писали:
К>>А вы знаете что если там какие то табы с пробелами не выровнены, но питон скрипт не запустится вообще? E>И это, блин, супер. В результате в коде будет хотя бы нормальное форматирование гарантировано. А то в свое время был охрененный скандал, когда я взял, и отформатировал проект, в котором форматирования не было вообще. Вернее оно было, но неправильное. Что то вроде: E>
E> for (i in 1..10)
E> {
E> if (a>5)
E> {
E> printf("h")
E> printf("e")
E> printf("l")
E>printf("l")
E> printf("o")
E> }
E> }
E>