LINUX.ORG.RU
ФорумTalks

Подгоревший питон со вкусом багета

 , ,


4

5

Столкнулся я (сишник-плюсовик) с Питоном. Причём не непосредственно с Питоном, а с его подобием (но разрабы мамой поклялись, что это почти Питон).
Столкнулся с отступами. Это, извините, жопа.
Языка я пока не знаю, библиотек тоже, поэтому в основном копипащу, а не пишу. И мне пришлось уже приложить несколько капустных листов к раскалённой точке контакта со стулом.
Я привык к табуляциям, поэтому особых проблем нет в моём коде, но когда приходится что-то копировать с интернета, то... Это жопа, господа.
Бедные питонисты. Как они выживают без внятных ограничителей блоков кода?
В общем: если ты сишник, то обходи Питон стороной если только у тебя нет действительно веской причины его использовать.
Система отступов — чудовищна.

★★☆

Значимые отступы это то что заставляет сменить партки (и стул) наверное всех кто столкнётся с питоном после хоть какого-то опыта программирования на чём угодно общеупотребимом.
После того как идея «отступы значимы» окончательно уложится у тебя в голове (на это может уйти до недели) тебя это перестанет смущать.

MrClon ★★★★★
()
Ответ на: комментарий от Solace

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от tailgunner

Ты их изучила на уровне «еще одна дрессированная обезьянка».

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

и ещё раз: в мире много непонятного УГ. не нужно всё пробовать, чтобы убедиться, что оно ненужно. можно посмотреть бенчмарки, убедиться, что оно неэффективно, и спокойно выбросить в мусорное ведро.

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

ты их изучила на уровне «еще одна дрессированная обезьянка».

для работы на достаточно серьёзные проекты этого хватало.

Это скажет о себе любая PHP-макака.

и ещё раз: в мире много непонятного УГ. не нужно всё пробовать,

Конечно. Я вот не пробовал, например, Agda, и поэтому не высказываю свое ценное мнение о нем. А вот ты не пробовала Python, но мнение высказываешь.

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

Эта строка не должна меняться, естественно.

Да не вопрос.

$ cat source.py
#!/usr/bin/env python

import dbus
import dbus.service
import dbus.mainloop.glib

import gobject

foo = { "xy": 0 }

class Service(dbus.service.Object):
{
   def __init__(self, message):
   {
      self._message = message
   }

   def run(self):
   {
      dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
      bus_name = dbus.service.BusName("test.service.action", dbus.SystemBus())
      dbus.service.Object.__init__(self, bus_name, "/test/service/action")
      self._loop = gobject.MainLoop()
      self._loop.run()
   }
}

if __name__ == "__main__":
{
   Service("This is the service").run()
}
$ cat source.py | perl -pe 's/\n/;\n/;s/\s*(if|for|while)\s+/_$1 /;s/{(.*)}/_CB_$1_CB_/g' | indent -i4 -nut -nbbo -npro -nbc -nbfda -nhnl -npsl -l500 -st | perl -pe 's/^\s*[{}]+;\n//;s/\s*;//;s/_(if|for|while)/$1/;s/_CB_(.*)_CB_/{$1}/'
#!/usr/bin/env python

import dbus
import dbus.service
import dbus.mainloop.glib

import gobject

foo = { "xy":0 }

class Service (dbus.service.Object):
    def __init__ (self, message):
        self._message = message

    def run (self):
        dbus.mainloop.glib.DBusGMainLoop (set_as_default = True)
        bus_name = dbus.service.BusName ("test.service.action", dbus.SystemBus ())
        dbus.service.Object.__init__ (self, bus_name, "/test/service/action")
        self._loop = gobject.MainLoop ()
        self._loop.run ()


if __name__ == "__main__":
    Service ("This is the service").run ()

У меня нет никакого интереса решать твои задачи тащемта. Если нужны фичи - допили их сам если тебе надо.

Забавно, что ты пытаешься написать транслятор языка, которого не знаешь вообще совсем.

Это просто элементарная задача обработки текста, никакими трансляторами тут не пахнет. И они тут нахер не нужны.

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

Откуда у локальных продаванов Not FCC approved железо? :)

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

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

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)

Использование скобочек и отступов одновременно, к слову — нарушение принципа DRY: одна и та же информация кодируется дважды, один раз для компьютера, второй раз для человека, и эта информация может рассинхронизироваться, приводя ко всяким goto fail.

PolarFox ★★★★★
()
Ответ на: комментарий от tailgunner

А вот ты не пробовала Python, но мнение высказываешь.

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от PolarFox

Я так никогда не делал, но что плохого в goto fail;? За собой смывать все ещё нужно. Это не только речь о памяти.

a1batross ★★★★★
()
Ответ на: комментарий от Stanson
if s.find('x') < 0: { foo(); }

=>

if s.find ('x') < 0:_CB_ foo ()
_CB_

и

if s.find('x') < 0: { foo() }

=>

if s.find ('x') < 0:{ foo () }

И кстати

Это просто элементарная задача обработки текста, никакими трансляторами тут не пахнет. И они тут нахер не нужны.

Это source-to-source трансляция.

tailgunner ★★★★★
()
Ответ на: комментарий от Iron_Bug

не знаю. наклеить можно что угодно.

Это шелкография на платах была. На том месте, где потом у серийных изделий значок FCC был. И было это до появления PII и i740 в продаже.

есть ли в Москве разработка

В то время не было. Сейчас не знаю.

что касается интела, то у них куда больше дохода от продажи серверов и сетевого оборудования,

Ну так к сайту на очередном говнофреймворке сервер помощнее нужен.

я думаю. сегмент геймерских материнок у них вообще никакой.

Там основной доход от i5/i7. Мамки копейки стоят.

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

Не просто. Т.е. этот интерес у них несомненно присутствовал, мы им иногда отписывали о найденных глюках, но он был не далеко не единственный.

Stanson ★★★★★
()
Ответ на: комментарий от PolarFox

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

Iron_Bug ★★★★★
()

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

fixed

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

Все мои редакторы успешно заменяют любые последовательности пробелов с новых строк на \t. :)

А так, были когда-то проблемы такие в Python. Хоть это и было давно, но осадок остался. Нет ничего лучше полного контроля над собственным же кодом.

Кстати, вы можете ещё больше меня ненавидеть. Я не только везде использую \t, но ещё и ставлю внешние скобки в условиях. Да, в Python.

a1batross ★★★★★
()
Ответ на: комментарий от Stanson

Не просто. Т.е. этот интерес у них несомненно присутствовал, мы им иногда отписывали о найденных глюках, но он был не далеко не единственный.

ну, значит это и было обычное тестирование железа на нагрузки. а никакой не заговор против юзеров.

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от tailgunner

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

Это source-to-source трансляция.

Хрен там. Задача сводится к следующему: Убрать из текста все пробелы в начале строк. Выводить строки предваряя их N пробелами. Если встречается строка из одной «{» то её не выводить, а сделать N += 4. Если встречается строка из одной «}» то не выводить её, а сделать N -= 4.

Да фигли, на тебе однострочник, ты честно наныл:

cat source.py | perl -e '$N=0;while(<>){$_=~s/^[\t ]*//;if($_=~/^{$/){$N+=4;}elsif($_=~/^}$/){$N-=4;}else{print " " x $N . $_;}}'

:)

Скобки блоков должны быть единственным знаком в строке. Вне зависимости от ЯП этот однострочник запросто уберёт блочные скобки и расставит нужное количество пробелов в блоках а-ля пистон.

Изобретёшь неработающий пример - прошу в студию :)

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

ну, значит это и было обычное тестирование железа на нагрузки. а никакой не заговор против юзеров.

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

Stanson ★★★★★
()
Ответ на: комментарий от Iron_Bug

пошутили они. а то как иначе вас мотивировать для написания нудных тестов для железа? :)

С таким баблом (по тем временам) шутить для мотивации у них не было никакой необходимости и они прекрасно это знали. :)

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

Ну так доковыряй если тебе надо

Мне надо? Да ты совсем плохой. Напоминаю: сумрачная царица сишки вещала, что задача решается «одним скриптом», но соскочила, когда я попросил этот скрипт. Ты взялся за работу, но пока ее не сделал.

Скобки блоков должны быть единственным знаком в строке

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

Да фигли, на тебе однострочник, ты честно наныл:

И он снова не работает:

d = {
 "x": 1
}
=>
d = {
"x": 1

tailgunner ★★★★★
()

Я, как сишник-плюсовик, тащюсь с питона на нём прикольно тестики, прототипчики, парсерочки/анализаторы и веб-прокси-морды ваять. Имхо, для своих задач оно торт, думаю и тебе понравится когда редактор настроишь :)

Отступы вообще не парят(мб дело в vim, хотя в pycharm тоже не парили вроде), больше всего парит угрёбищность отладки по сравнению с компилируемыми веществами.

Единственный реальный косяк идеи с отступами и переносами, который, действительно был хоть как то аргументирован: при передаче по сети это лишние данные, и лишняя сложность разбора, т.е. js из питона - так себе(только если очень надо).

А что за «почти Питон» можно поподробнее тему раскрыть (читать все 5 страниц чет нет желания)?

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

Напоминаю: сумрачная царица сишки вещала, что задача решается «одним скриптом», но соскочила, когда я попросил этот скрипт.

Ну я тебе написал этот скрипт, вместо сумрачной царицы, ибо она права на все 100%. Пистоновы понты с отступами - это только понты и ничего больше.

Ты взялся за работу, но пока ее не сделал.

Чо? Какая нахер «работа»? Какой нафиг «взялся»? Какое ещё «пока не сделал»? За работу я денег беру, а это так, развлекуха для троллинга почитателей некузявого пистона. Ну и ты вообще за базаром-то следи, а то денег должен окажешься внезапно.

И он снова не работает:

Это твой моск не работает. Тебе же ясно написали в инструкции - одинокая скобка в строке является маркером блока. В пистоне нет никакой необходимости фигурные скобки выносить на отдельную строку.

Если ты такой извращенец, что очень нужны фигурные скобки на отдельных строках в питоне - да не вопрос. Замени в однострочнике ^{$ и ^}$ на то, что ты хочешь использовать в качестве маркера блока. Например на какие-нибудь ^@BEGIN@$ и ^@END@$, или там вообще эмодзи какие, прости, господи.

Ты обосрался со своими измышлениями по поводу «трансляции» и «особенности» пистона. задача оказалась элементарной обработкой текста не требующей никаких тренсляторов и уже на пустом месте ты пытаешься натужно найти какие-то недостатки в нанытом решении.

Пистон без этих сраных ублюдочных отступов вместо нормальных блоков - вопрос однострочного скрипта на перле. Следовательно, маразм с отступами в пистоне для маркировки блоков - не более чем пустой выпендрёж для увеличения ЧСВ пистонолюбцев. Синтаксически он ничего не даёт, тождественен общепринятой маркировке блоков скобками, begin-end и т.п. и ничего кроме геморроя не предоставляет.

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

Кстати, вы можете ещё больше меня ненавидеть. Я не только везде использую \t, но ещё и ставлю внешние скобки в условиях. Да, в Python.

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

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

Это твой моск не работает. Тебе же ясно написали в инструкции - одинокая скобка в строке является маркером блока. В пистоне нет никакой необходимости фигурные скобки выносить на отдельную строку.

В Python фигурные скобки _уже_ являются частью синтаксиса. Выше приведен валидный Python. который твой скрипт искажает.

Ты обосрался со своими измышлениями по поводу «трансляции» и «особенности» пистона. задача оказалась элементарной обработкой текста

Ты ее не решил, недоумок.

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

В Python фигурные скобки _уже_ являются частью синтаксиса. Выше приведен валидный Python. который твой скрипт искажает.

А я-то откуда знаю, что там в пистоне является частью синтаксиса, а что нет? Не нравятся фигурные скобки - возьми символы или последовательности символов заведомо не являющиеся частью синтаксиса, и обозначай блоки ими. Делов-то.

Ты ее не решил, недоумок.

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

Так что недоумок здесь именно ты, ибо не смог воспользоваться готовым решением с учётом своих задач. Прям как те недоумки, которые копируют что-то типа «ls -la /home/jonny» и жалуются что «ваш линукс ниработает», будучи неспособными заменить таки /home/jonny на свой хомяк.

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

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

А я-то откуда знаю, что там в пистоне является частью синтаксиса, а что нет?

Да мне пофиг, что ты знаешь. Твой скрипт, который должен обрабатывать Python-программу, портит валидный Python-код.

Понимаешь в чём дело, умение пользоваться даденным решением

Ты не дал решения.

Твоя неспособность решать такие элементарные задачки

Ты упорот. Даже больше, чем сумрачная царица.

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

Да мне пофиг, что ты знаешь. Твой скрипт, который должен обрабатывать Python-программу, портит валидный Python-код.

А «ls -la /home/jonny» который вендузятник нашёл в инторнетах почему-то не показывает ему содердимое его хомяка в убунточке.

Уподобляешься этому вендузятнику? Ну отличненько, уподобляйся. Пистонолюбцы такие пистонолюбцы.

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

Ты не дал решения.

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

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

Ты упорот. Даже больше, чем сумрачная царица.

Ага ещё как упорот. Тот вендузятник, тупо запускающий «ls -la /home/jonny» и получающий «No such file or directory» абсолютно точно так же думает, что все кто его пытается уму-разуму научить - упороты, не могут решить его задачу, и вообще уроды красноглазые.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 2)
Ответ на: комментарий от a1batross

Все мои редакторы успешно заменяют любые последовательности пробелов с новых строк на \t. :)

Я даже хз, на что мой в каком случае заменяет, все слишком хорошо в этом плане

Нет ничего лучше полного контроля над собственным же кодом.

Табы, внешние скобки в условиях

контроль кода

/me покрылся фейспалмами

derlafff ★★★★★
()
Ответ на: комментарий от alozovskoy

Еще научи свой блокнот чтоб твои табы в пробелы преобразовывались и наоборот

А зачем их преобразовывать? Питон не смог осилить отступы в виде табов?

h578b1bde ★☆
()
Ответ на: комментарий от Iron_Bug

пистон за два дня изучается целиком

noway

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

Эт ты с жабаскриптом перепутала.

ggrn ★★★★★
()
Ответ на: комментарий от Iron_Bug

Газификация луж прошла успешна!

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

3.14 и провокация, посмотри на тот же инстаграм или битбукет. Хотя опять же, может во снах с обезьянками и т.д.

ggrn ★★★★★
()
Ответ на: комментарий от znenyegvkby

Не спорю. Но хочу я иногда «попистонить», это сильнейших грех что-ли? :)

Любишь иногда подушить змея? У верунов, кажется, что-то было на эту тему.

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

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

FTFY.

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

А у меня так

void ВотТак()
	{
	…
	}

Можете забрасывать помидорами.

h578b1bde ★☆
()
Ответ на: комментарий от pon4ik

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

js

Bitch, please. Посмотри на любой типичный говносайт: там объём js-говна уже давно превышает объём полезного для пользователя контента в разы, а ты о каких-то там отступах беспокоишься.

h578b1bde ★☆
()
Ответ на: комментарий от tailgunner

Ты ее не решил, недоумок.

у мочератора бомбит, забавно :D

dormeur86 ★★★★
()
Ответ на: комментарий от Iron_Bug

самая жопа там с пожиранием ресурсов и отсутствием настоящей многопоточности.

1+

Hertz ★★★★★
()

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

Wizard_ ★★★★★
()
Ответ на: комментарий от znenyegvkby

Да, я отправлюсь за это в ад.

Тебе придётся встать в конце длинной очереди из js-хипсторов.

h578b1bde ★☆
()
Ответ на: комментарий от i-rinat

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

«Отлить в граните» (с)

Hertz ★★★★★
()

Бедные питонисты. Как они выживают без внятных ограничителей блоков кода?

Отступ - это такой же символ, как и точка с запятой. Или как фигурная скобка.

Вообще система отступов имеет свои неоспоримые преимущества. Как минимум читаемость кода повышается в разы.

Quasar ★★★★★
()
Ответ на: комментарий от Lavos

Lavos> А скоро ты столкнешься с тем, что код на петоне тормозит, т.к. x86 железо его не умеет и приходится использовать промежуточные прослойки...

Если что, python не для высокопроизводительных вычислений делался. Его делали как средство быстрого прототипирования и клей для остального кода. Оттого на высокую цену вызова функции в python забивают. Да ещё и сложный интерпретируемый язык - он непременно будет работать не очень быстро, так как проще написать и отладить на нём прототип (делаем решение), а потом переписать медленные участки на чём-нибудь более быстром (оптимизируем решение).

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