LINUX.ORG.RU

Знакомство с Python 3: Часть 2. Более сложные темы

 ,


0

0

В предыдущей статье о Python 3—также известном как Python 3000 или Py3K— обсуждались некоторые простые изменения языка, нарушающие обратную совместимость, такие как новая функция print(), тип данных bytes и изменения в типе string. Здесь, во второй части, изучаются более сложные темы, большинство из которых также нарушает обратную совместимость с версиями 2.х: абстрактные базовые классы (abstract base classes или ABC), метаклассы, аннотации функций и декораторы, поддержка целочисленных констант, иерархия числовых типов и изменения в возбуждении и перехвате исключительных ситуаций.

>>> Подробности

★★★

Проверено: hibou ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

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

Не знаю, я вот был склонен идеализировать Питон (даже отступы защищал в спорах с перловиками), пока не получил на нём большую практику с тонной быдл^Wэнтерпрайз-кода. Ну ведь есть свои проблемы в нём (и не только из-за отступов), как есть они в любом другом языке. Послушать же иных питонистов, так у них проблем вообще не бывает. Чужой код у них всегда компактный и простой, копи-пастом они не пользуются, друг другу куски кода не передают, в кодогенерации и однострочниках не нуждаются, и т.п. Живут в общем в своём виртуальном мире фанатичных питонистов ;)

Hjorn ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

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

DNA_Seq ★★☆☆☆ ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

> Или указатели в си это проблема си а не тех кто неправильно ими пользуются

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

Hjorn ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

> В чём ценность то этой фичи тогда?

1. Дисциплинирует программиста (быдлокод менее возможен).
2. Код становится супер читабельным, что ОЧЕНЬ ВАЖНО при сопровождении кода (почему то это не многих волнует, а ведь это ключевой момент).
3. Нет кучи begin/end {/}, которые только засоряют код.

Для меня это важные аспекты. Возможно не всем этого достаточно...

fabregas ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

А начало дискуссии отследить? Разговор шел об автогенерации кода при использовании пистона в качестве javascripta или php.

gns ★★★★★ ()

Re: извените

>1. Дисциплинирует программиста (быдлокод менее возможен).
Если программер до пайтона писал на бейсике, то и в пайтоне он будет писать на бейсике. И никакая дисциплина отступов от _быдлокода_ не спасет. Кстате, а что вы подразумеваете под быдлокодом-то? Неидеально отфоматированный и задокументированный, штоле?

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

>3. Кстате, "куча" операторных скобок - это тоже результат дисциплинированности. Не возникают, например, проблемы с if-else-else.

impfp ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

> Разговор шел об автогенерации кода при использовании пистона в качестве javascripta или php.

На счет javascript ничего не скажу, а на счет php, так это замечательно, что нельзя программу писать в HTML файлах. Сразу заставляет использовать шаблоны. http://docs.djangoproject.com/en/dev/ref/templates/builtins/

bibbber ()
Ответ на: Re: извените от impfp

Re: извените

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

Знаете, выискивать или соченять не буду никаких примеров. Я говорю исключительно о том, что встречал в практике. Если хотите, то  ДЛЯ МЕНЯ он суперчитабельный, хотя пишу я на многих языках постоянно.

не знаю проблем с if-else-else в python'е. Если вы знаете, подскажите..

fabregas ()
Ответ на: Re: извените от fabregas

Re: извените

>if-else-else Сори, ошибочко: fix: if-if-else, известная вещь. if(x) if(y) else z; И в пайтоне, пожалуй, выбор принадлежност else смотрится наглядно. Но у него вроде бы нет операторных скобок, а речь я изложил про них родимых.

impfp ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

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

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

> Послушать же иных питонистов, так у них проблем вообще не бывает. Чужой код у них всегда компактный и простой,

писали же что это не так :)

> копи-пастом они не пользуются,

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

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

> друг другу куски кода не передают,

pastebin.com. либо аналог. сейчас на всех вменяемых irc-каналах это стандарт.

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

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

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

olegsov ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

>Разговор шел об автогенерации кода при использовании пистона в качестве javascripta или php.

Так язык писался для людей а не для машин. Просто другая ниша.

DNA_Seq ★★☆☆☆ ()
Ответ на: Re: извените от impfp

Re: извените

на си:

if условие
{
  операторы;
}
else
{
  операторы;
}
...

на питоне

if условие:
  операторы
else:
  операторы
....

итого четыре лишние строки

DNA_Seq ★★☆☆☆ ()
Ответ на: Re: извените от DNA_Seq

Re: извените

> на си:

Сравнивать пистон с си -- как минимум, глупо. К тому же, если оператор 
один, запись будет не длиннее пистоновской. К тому же, очень часто пишут

if условие {
  операторы;
} else {
  операторы;
}

Итого, на пистоне выиграли одну строку.

a3 ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

>В чём ценность то этой фичи тогда?

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

elipse ★★★ ()
Ответ на: Re: извените от a3

Re: извените

>К тому же, очень часто пишут

if условие {
  операторы;
} else {
  операторы;
}

а вот за это надо в биореактор. Концы скобок так искать гораздо труднее и хорошо если редактор парныее скобки подсвечивает

DNA_Seq ★★☆☆☆ ()
Ответ на: Re: извените от a3

Re: извените

Вам походу питон жить мешает)) Такая злоба в словах... Не нравиться - не используйте. Язык программирования он же как кисточка для художника: кому какая больше нравится, тот такой и рисует.

fabregas ()
Ответ на: Re: извените от DNA_Seq

Re: извените

>а вот за это надо в биореактор. Концы скобок так искать гораздо труднее и хорошо если редактор парныее скобки подсвечивает

вынужден не согласиться. ИМХО очень удобная запись, если нормально форматировать текст (как в этом же примерчике).
Сам пишу иначе только когда большое обилие елс-ифов или в свиче.

fabregas ()
Ответ на: Re: извените от DNA_Seq

Re: извените

> а вот за это надо в биореактор. Концы скобок так искать гораздо труднее и хорошо если редактор парныее скобки подсвечивает

Ну тогда за любой код на Питоне тоже надо в биореактор. Ибо в примере показан тот же самый Питон, только со скобками. Здесь концы блоков искать может и правда труднее (хотя с подсветкой - элементарно), но в Питоне то они вообще невидимые!

Hjorn ()
Ответ на: Re: извените от fabregas

Re: извените

> ИМХО очень удобная запись, если нормально форматировать текст

У меня единственная претензия - cuddled else. Всё же разумнее переносить его на новую строку, если это только не код на тикле. Там такая запись естественна и даже необходима.

Hjorn ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

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

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

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

Копипастинг нужен при рефакторинге. Я ещё не видел, чтобы кто то с первого раза написал код с идеальной структурой. А при изменении структуры неизбежно нужно менять форматирование. В Питоне этот процесс не автоматизируется, и это главная претензия к его синтаксису. Питон - это такой read-only language, если утрировать :)

Hjorn ()
Ответ на: Re: извените от Hjorn

Re: извените

>Ибо в примере показан тот же самый Питон, только со скобками.

в подобном примере легко пропустить скобку

DNA_Seq ★★☆☆☆ ()
Ответ на: Re: извените от DNA_Seq

Re: извените

> в подобном примере легко пропустить скобку

В нормальных редакторах (c) скобки вставляются парами. И если ты все же пропустишь скобку, IDE тебе сразу подскажет. Чай не пистон.

a3 ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

После того, как его стали использовать и для этого, выяснилась некоторая языка неуниверсальность. Причен заложенная в язык изначально. Или не надо писать всякие там mod_python и прочие SSI-процессоры (никто же не пишет mod_fortran или mod_occam) или в консерватории надо что-то править. Язык оказался применим и для этого, но тут же возникли проблемы там, где их быть не должно. Язык, как мне кажется, должен позволять "однострочную" запись и лексически различимые начало и конец блока.

Иначе это превращается в подобие whitespace (аналог brainfuck'a, целиком состоящий из пробелов и табуляций)

gns ★★★★★ ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

> mod_occam

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

Это сознательная ирония? %)

tailgunner ★★★★★ ()
Ответ на: Re: извените от a3

Re: извените

>В нормальных редакторах (c) скобки вставляются парами. И если ты все же пропустишь скобку, IDE тебе сразу подскажет.

А нахрена вообще тогда скобки? Оккам уже точит свою бритву

DNA_Seq ★★☆☆☆ ()
Ответ на: Re: извените от DNA_Seq

Re: извените

> А нахрена вообще тогда скобки? Оккам уже точит свою бритву

Оккам пускай попридержит бритву, ибо скобки наглядно показывают блок кода. Скобки, впрочем, мне тоже не особенно нравятся, т.к. первая из них явно лишняя. Меня бы устроило как в окамле заканяивать выражение ";;". Да даже уродливый паскале-рубевский end гораздо более приемлем, чем пистоновская простыня.

a3 ()
Ответ на: Re: извените от a3

Re: извените

Ты вижу к бейсику больше тяготеешь. Классическому. Оно и понятно

DNA_Seq ★★☆☆☆ ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

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

За следующую строку в С руки программисту оторвать и выбросить нужно:

if (a == 1) { if (b == 2) {/*something*/} else {/*something*/} } else {/*something*/} 

Python же бережет руки программиста, тобы их не оторвали! И просто не дает написать такого ужаса...
Приемлемым вариантом остается:

if is_present: show()

Как я уже говорил раньше, python просто учит программиста писать хороший код (насколько это вообще возможно средствами языка программирования ;) ).

fabregas ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

> За следующую строку в С руки программисту оторвать и выбросить нужно: ...

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

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

gns ★★★★★ ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

> Этот код порождается одним интерпретатором для другого интерпретатора. Его человек не читает. Нахрена там красота стиля?

А нахрена там 15 уровней вложенности? Мне правда интересно.

tailgunner ★★★★★ ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

>Питон начали использовать вместо php и яваскрипта

Ну не вижу проблем с заменой php... Я в вэбе не спец, но мусолил Django к примеру. И все хорошо генерилось и чесно сказать дискомфорта никакого не было, а скорее наоборот.
Но это же сторона сервера. Если говорить о том, чтобы использовать python на стороне клиента как джаваскрипт, то это дурная идея ИМХО. Это действительно будет не удобно и будет породжать кучу ошибок, которые и выявить то не так просто будет... Так что нужно разделять области применения языков (как инструментов)... 
На python'е я не сяду писать ядро ОС к примеру. И с этого следует, что язык фтопку?)

fabregas ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

Как классический обработчик SSI-запросов (а в таком контексте джанго и используется) питон хорош. С заменой пхп проблема может быть только в том, что кто-то решит пропустить исходный html (с питоновской вставкой) через какой-нибудь xslt-процесссор (до того, как его получит mod_python) и я не гарантирую, что форматирование выходного html-файла будет удовлетворительным с точки зрения питоновской вставки.

А в остальном Вы правы.

gns ★★★★★ ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

> где изменение уровня индентации кодируется специальными последовательностями символов вроде {{, }}. генератор выдает...

чо уж сразу не использовать стандартную блочную нотацию - xml? чудо-язык:

<python>class foo:<div>def foo(self):<div>return 1 + 2</div></div></python>

=)

Lucky ★★ ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

> прикольно, пайтону требуются костыли на пайтоне :)

О такой необходимости даже не задумывался. У каждого языка свои особенности. Только начинаете в области IT?

pythonist ()

Re: Знакомство с Python 3: Часть 2. Более сложные темы

> Нафига в канал перед строкой в 4 символа типа i=18 передавать ещё 15 пробелов?

Какая разница сколько их там в исходниках? Интерпретируется уже скомпилированный код.

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