LINUX.ORG.RU

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

 


0

0

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

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

★★★

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

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

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

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

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

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

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

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

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

Hjorn
()
Ответ на: комментарий от DNA_Seq

> Пусть быдло дальше пишет на любой_язык если ничего кроме осилить не может.

Очевидный фикс.

a3
()
Ответ на: комментарий от Hjorn

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

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

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

fabregas
()
Ответ на: комментарий от DNA_Seq

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

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

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

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

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

impfp
()
Ответ на: комментарий от gns

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

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

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

> Ужас, ужас. Как жить теперь? Питон уже снес.

мда.. питон уже понос..

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

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

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

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

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

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

impfp
()
Ответ на: комментарий от Hjorn

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

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

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

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

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

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

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

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

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

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

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

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

olegsov
()
Ответ на: комментарий от matumba

> свой недоязыг преподу - получит очередную тройку. :)

Студенты из Африки, не сдавшие хвосты, повешены около деканата...

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

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

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

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

на си:

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

на питоне

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

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

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

> на си:

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

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

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

a3
()
Ответ на: комментарий от Hjorn

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

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

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

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

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

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

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

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

fabregas
()
Ответ на: комментарий от DNA_Seq

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

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

fabregas
()
Ответ на: комментарий от DNA_Seq

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

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

Hjorn
()
Ответ на: комментарий от fabregas

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

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

Hjorn
()
Ответ на: комментарий от olegsov

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

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

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

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

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

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

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

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

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

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

a3
()
Ответ на: комментарий от DNA_Seq

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

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

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

> mod_occam

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

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

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

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

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

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

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

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

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

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

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

Скорее иллюстрация того, что язык ограниченного применения ограниченно применяется. :)

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

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

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

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

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

if is_present: show()

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

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

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

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

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

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

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

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

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

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

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

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

Важен принцип, а не число отступов... :)

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

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

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

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

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

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

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

=)

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

> Вот кстати и скрипт для восстановления отступов

прикольный маразм :-)

pythonist
()
Ответ на: комментарий от matumba

> С таким подходом к проектированию, пусть отнесёт свой недоязыг преподу

Оцени успех языка, потом умничай.

pythonist
()
Ответ на: комментарий от impfp

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

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

pythonist
()
Ответ на: комментарий от gns

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

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

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