LINUX.ORG.RU

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

 


0

0

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

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

★★★

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

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

Самое ужасное, что везде вставляет тег linux.

shahid ★★★★★
()

ждемс на быдлохабре с бурными обсуждениями

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

> гвидо не знал что такое proper tail call optimization и на основе этого незнания дизайнил питон.

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

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

> бимеробот похоже новости автоматом генерит, на основании ИИ.

ага. diala ? :)

ferro
()

и вообще хватит публиковать всякую муть

Tu3eK
()

Сначала границы непонимаемости перешёл PL/1, потом C++, теперь вот питон к ним приближается...

gns ★★★★★
()

Вдохнул дым горящих исходников питона... До сих пор прет

MiPh
()

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

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

В джанго, всё-таки, довольно удобно писать @login_required...

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

>> Ветераны писали его название как PL/I

> Fixed

"Не спеши ты нас хоронить" (c)

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

просто syntax sugar. ты никогда не используешь функции-модификаторы функций?

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

> но зачем было его всем пихать

Никому его не пихают.

const86 ★★★★★
()

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

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

Ветераны тут непричем.

The name is seen as either "PL/1" (Arabic digit "1") or "PL/I" (Roman numeral "I"). When first introduced, the language name used the digit (for example, the March 1968 IBM language specifications (Y33-6003-0).) But by late 1976, when the ACM SIGPLAN Working Group released the formal definition, it used the roman numeral instead. In general, since then the roman numeral is most commonly used.

http://en.wikipedia.org/wiki/PL/1

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

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

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

>до сих пор корежит от необходимости следить за отступами.

Боюсь представить какой ужас Вы пишете на других языках (например, с C-style синтаксисом). Может в вашем случае Python - это единственно верный выход?

PS: тоньше, тоньше нужно

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

> рушат мои стройные ряды ифов и дефов

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

Например так

#!/usr/bin/env python

if 1:

#{

if 1:

#{

print "hello world"

#}

else:

#{

print "you will never see it"

#}

#}

Кстати при редактировании vi будет выделять парные фигурные скобки.

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

Вот кстати и скрипт для восстановления отступов - нужно заменить <space> на пробел

#!/usr/bin/env python

import sys

indent = 0

for line in sys.stdin.xreadlines():

<space>if line.strip() == '#}': indent -= 2

<space>print ' ' * indent + line.strip()

<space>if line.strip() == '#{': indent += 2

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

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

:)

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

> Уже пол года пытаюсь кодить на питоне и до сих пор корежит от необходимости следить за отступами.

Э-э-э, надо перестать использовать /bin/cat в качестве редактора?

P.S. ed'ом тоже, видимо, сложновато. А вот в "искаропки" емаксе или _настроенном_ vim'е уже всё хорошо. И да, сдвиг блока вправо или влево - одно нажатие кнопки, ага.

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

> прикольно, _инвалиду_ требуются костыли на пайтоне :) Fixed, как у вас тут принято. Откройте для себя редактор, отличный от нотпада.

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

> Э-э-э, надо перестать использовать /bin/cat в качестве редактора?

При чём тут редактор? Внимательно следить за отступами нужно даже при чтении. Это особенно увлекательно, если функция не помещается целиком на один экран. Хотя конечно редактор с вертикальными линиями может здорово помочь. Жаль в емаксе такого нет.

> И да, сдвиг блока вправо или влево - одно нажатие кнопки, ага.

Ага, только делать это надо очень осторожно, чтобы логическую стуктуру не поломать. А то ведь у Питона синтаксис хрупкий и необратимый. Случайное нажатие на Tab или Backspace - и вот у нас уже совсем другая синтаксически корректная программа. Справедливости ради, емакс отчасти решает эту проблему. Вообще, программирование на Питоне в простом текстовом редакторе - это боль... Даже вим не спасает. Надо ж было Гвидо так отличиться с этим извратным и, что важнее, нестандартным способом разграничения блоков.

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

бред. во-первых случайный таб причведет к ошибке т.к. отступы увеличиваются только после опредеденных конструкций - if, def, for, while и т.п.

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

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

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

> Уже пол года пытаюсь кодить на питоне и до сих пор корежит от необходимости следить за отступами

Даже когда начинал не корежило. Сразу открыл для себя scite в гуях и vim в консоле.

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

Зато цикл for какой красивый... Хотя в перле есть foreach

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

> Уже пол года пытаюсь кодить на питоне и до сих пор корежит от необходимости следить за отступами. Больше всего проблем с этим.

Идите уже обратно в дворники. Программировать не всем дано.

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

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

> Даже вим не спасает.

Вим - это кошмар. Им следует пользоваться только при крайней необходимости.

> Надо ж было Гвидо так отличиться с этим извратным и, что важнее, нестандартным способом разграничения блоков.

Отступы - это вообще лучшее, что есть в питоне.

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

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

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

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

> Вим - это кошмар. Им следует пользоваться только при крайней необходимости.

Тролишь? (хотя я сам емаксер)

> Отступы - это вообще лучшее, что есть в питоне.

Спорно. Из-за них до сих пор нормальной лямбды не сделали. И не сделают. Что плохо.

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

В Цэшарпе нет понятия "аннотации". Будут ещё версии или огласим официальное английское название?

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

$ > честно говоря никогда не понимал зачем нужны декораторы.

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

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

matumba ★★★★★
()

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

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

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

Ты сам сессию-то сдал?

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

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

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

> Вы не находите такой дизайн несколько мудаическим? Напоминает "сначала напишем, потом спроектируем".

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

>Либо у нас одна нормальная функция(которая и обязана проверять вход),

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

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

И по всему коду искать вызову функции, когда это можно сделать в одном месте?

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

Да это-то правда, дело не в выборе редактора, но в средствах автоматического генерирования кода. Сейчас вон пошла мода на использование питона вместо javascripta. Вот где грабли могут отрасти, особенно в связи с вольным отношением самых разных html-препроцессоров и прочих скриптов к переводу строки.

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

>Отступы - это вообще лучшее, что есть в питоне.

До тех пор, пока не начинаешь генерить код автоматически.

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

> До тех пор, пока не начинаешь генерить код автоматически.

А в чем проблема то? Не знаю чем ты там генеришь, но если эта генерилка не умеет нормально отступы оставить, то втопку... python то тут при чем?
А отступы - это реально очень круто. После того, как некоторое время пописал на этом языке, мой код на других языках стал очевидно более читабелен и красивей)
Вывод - python очень рекомендую для обучения программированию, как первый язык.

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

Эту и похожие фразы можно сократить до слова "аспект"

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