LINUX.ORG.RU
ФорумTalks

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

 , ,


4

5

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

★★☆

Ответ на: комментарий от Rastafarra

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

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

В питоне намного меньше лишнего текста, поэтому проблемы такой нет.

нука-нука, как нынче в питоне пишут что-то вроде:

list
  .stream()
  .map()
  .filter()
  .sort()

? :)

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

Тысячи их

Тем что он один.

В каком смысле «один»? Стандартов кодирования сотни. Действительно, только один из них называется PEP8, но достоинство ли это?

Camel ★★★★★ ()
Ответ на: Тысячи их от Camel

В каком смысле «один»?

В прямом.

Стандартов кодирования сотни.

Назови мне Топ20 стандартов кодирования на Python.

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

А меня раздражает, когда

void скобкиСтавятВотТак () 
{
...
}

А не

void вотТак () {
...
}

Ну и лох.

Pavval ★★★★★ ()

Если бы тебе понравился пайтон, то это бы означало, что с ним что-то не так.

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

это пишут в одну строку

Это еще почему? А как длинные цепочки выражений оформлять? Вот такие:

comment = (
    ArticleComment
    .query
    .filter(ArticleComment.id == comment_id)
    .filter(ArticleComment.article_id == article_id)
    .first_or_404()
)

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

Ты напрашиваешься на сочувствие в связи с тем что ты не осилил документацию по встроенным функциям?

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

Виляния

Назови мне Топ20 стандартов кодирования на Python.

Почему Python? Где во фразе «стандартов кодирования» слово Python? За что памятник-то? Чем PEP8 лучше Linux Coding Style или GNU Coding Style?

Camel ★★★★★ ()

А нефиг копировать, надо самому писать.

te111011010 ()
Ответ на: Виляния от Camel

Назови мне Топ20 стандартов кодирования на Python.

Почему Python?

Потому что PEP8 - стандарт кодирования Python.

Где во фразе «стандартов кодирования» слово Python?

Не виляй.

Camel> Стандартов кодирования сотни, чем PEP8 так замечателен?

В слове «PEP» первая «P» обозначает «Python».

tailgunner ★★★★★ ()

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

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

вообще претензию к отступам можно повернуть претензией к плюсам - «какого х я должен ставить {}, я хочу ставить begin-end, мне так понятнее»

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

Ну всё

В слове «PEP» первая «P» обозначает «Python».

Приехали. PEP8 замечателен тем, что для Python'а. Финиш. Потому что гладиолус.

Camel ★★★★★ ()
Ответ на: Ну всё от Camel

PEP8 замечателен тем, что для Python'а. Финиш.

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

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

Обязан {}

вообще претензию к отступам можно повернуть претензией к плюса - «какого х я должен ставить {}, я хочу ставить begin-end, мне так понятнее»

Во-первых, вы либо трус, либо самообманщик. Если уж хотите материться, то делайте это прямо и открыто, а не как в детском саду. Во-вторых, компилятор C++ не поймёт begin-end, а интерпретатор python'а поймёт табуляцию и пробелы. Where is your PEP now?

Camel ★★★★★ ()
Ответ на: Виляния от Camel

За что памятник-то?

За правильный подход к организации языка, который предотвратил появление 100500 разных стилей и интерпретаций.

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

Общее понимание

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

Отнюдь, это общее понимание многих python'щиков. Выше сказали, что за PEP8 надо памятник ставить, а я искренне пытаюсь понять чем же PEP8 так хорош? Почему за стандарты кодирования для Java или C++ памятников не полагается?

Camel ★★★★★ ()
Ответ на: Общее понимание от Camel

PEP8 замечателен тем, что для Python'а. Финиш.

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

Отнюдь, это общее понимание многих python'щиков

Приведи мнение хоть одного.

tailgunner ★★★★★ ()
Ответ на: Обязан {} от Camel

компилятор C++ не поймёт begin-end

#define begin {
#define end }

redgremlin ★★★★★ ()
Ответ на: Обязан {} от Camel

компилятор C++ не поймёт begin-end, а интерпретатор python'а поймёт табуляцию и пробелы. Where is your PEP now?

Перестань уже спорить о том, о чем не знаешь вообще ничего:

«Spaces are the preferred indentation method.

Tabs should be used solely to remain consistent with code that is already indented with tabs.»

tailgunner ★★★★★ ()
Ответ на: Обязан {} от Camel

Во-первых, вы либо трус, либо самообманщик. Если уж хотите материться, то делайте это прямо и открыто, а не как в детском саду

ваше мнение очень важно для нас, спасибо за звонок.

Во-вторых, компилятор C++ не поймёт begin-end, а интерпретатор python'а поймёт табуляцию и пробелы.

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

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

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

вопрос остался без ответа :(

На вопрос дан ответ, а сам вопрос не имеет отношения к лямбдам.

tailgunner ★★★★★ ()
Ответ на: Общее понимание от Camel

Почему за стандарты кодирования для Java или C++ памятников не полагается?

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

кстати, а ты сам-то как? хоть какой-то stylecheck юзаешь, или «как хачу так и варачу»?

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

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

Я прочитал https://docs.python.org/2.7/tutorial/ перед тем, как что-то писать. Полного понимания языка не случилось, конечно же, там всё равно много тонкостей, которые приходят с годами опыта. Но простые скрипты стало гораздо проще читать и писать. Документацию, знаешь ли, люди старались, писали, чтобы другим было понятнее.

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

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

Да это пустой вопрос. Разумеется ни один code style не покрывает всего, каким бы правильным он не был. Фантазия разработчиков неограничена, к сожалению.

Только обычно если ты часто «борешься с code style» - ты что-то делаешь сильно не так.

Пример с comment из того поста, например, хочется не форматировать, а переписать.

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

На самом деле ещё короче, так как мап и фильтер распиывается в один generator expression, да и стрим не нужен.

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

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

Никак. Но можно просто вложенную функцию задать:

def func(b):
  def f(a):
    return a + 1
  return map(f, b)

print func([1,2,3])

i-rinat ★★★★★ ()

Копируй код не с быдлосайтов.

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

Многострочные лямбды нужны не для этого (у тебя всё в обычных экспрешнах, пишу в одну строчку - не хочу), а для использования simple statements (print в python2, import, pass, raise, и т.д.

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

у тебя всё в обычных экспрешнах

У меня короткий пример, который должно быть просто понять. Для иллюстрации подхода.

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

LOL

$ cat lamba.py
from operator import add

bindl = lambda xs, f: reduce(add, map(f, xs))
let = lambda x, f: f(x)

print \
    bindl([1, 2], lambda x: 
    let  ([3, 4], lambda ys: 
    bindl(ys,     lambda y: 
    bindl([5, 6], lambda z:     
    [x * y * z]))))

$ cat lamba.py | sed -e "s/ /⎵/g"
from⎵operator⎵import⎵add

bindl⎵=⎵lambda⎵xs,⎵f:⎵reduce(add,⎵map(f,⎵xs))
let⎵=⎵lambda⎵x,⎵f:⎵f(x)

print⎵\
⎵⎵⎵⎵bindl([1,⎵2],⎵lambda⎵x:⎵
⎵⎵⎵⎵let⎵⎵([3,⎵4],⎵lambda⎵ys:⎵
⎵⎵⎵⎵bindl(ys,⎵⎵⎵⎵⎵lambda⎵y:⎵
⎵⎵⎵⎵bindl([5,⎵6],⎵lambda⎵z:⎵⎵⎵⎵⎵
⎵⎵⎵⎵[x⎵*⎵y⎵*⎵z]))))

$ python2 lamba.py 
[15, 18, 20, 24, 30, 36, 40, 48]
EXL ★★★★★ ()
Ответ на: комментарий от i-rinat

Подхода к чему?

Гвидо-стайл рекомендации «Не используйте анонимные функции, я их не понимаю и ваще!!»?

aedeph_ ★★ ()
Ответ на: LOL от EXL

Лучше уж никак, чем как попало.

i-rinat ★★★★★ ()

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

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

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

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

по определению непригоден для серьёзной разработки

Так можно и про Java сказать. Если что-то очень сложное, с непредсказуемыми требованиями (сложные программно-аппаратные комплексы, например), то сишечка. Никаких jvm.

только для наколеночных поделий

Смотря что писать. Если какой-то сложный монолит - да, будет трудно. В остальных случаях не справедливо.

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

А ваш многопоточность прям в любом софте нужна? Что многопроцессность в Unix уже стала табу или же и осе асинхронные очереди?

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

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

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

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

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

то то в вакансиях пишут знание пистона

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

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

Iron_Bug ★★★★★ ()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.