LINUX.ORG.RU

Изящество и неловкость Python. Часть 2


0

0

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

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

★★★

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

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

Да не вопрос, уважаемый! Какие именно у него есть достоинства? Чем он хорош? Кроме того что он старше # и "замечательный язык общего назначения"?

ЗЫ. Большие проекты делал. Не на питоне. Ибо считаю что на динамических языках большой проект (>200 классов на человека) писать низзя.

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

> Мне как-то фыркающий молодняк привели в команду, чтобы опыта набирались. Из них кто с .NET, кто с Java, кто с VC++, кто с PHP, кто по дрова. Сейчас уже все по полной на Питоне пишут модули и на Линукс перешли, и попробуй их сгони теперь.

Делитесь секретом - как смогли открыть людям глаза? :)

sv75 ★★★★★
()

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

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

> Делитесь секретом - как смогли открыть людям глаза? :)

Я не собирался распинаться перед ними как преподы в универе, к чему они привыкли и повсеместно ждали и провоцировали. Я им объяснил своё мнение, стандарты фирмы и зарплаты в случае успеха. Революционеров, так сказать, в фирме не оставляем, нужно чтобы фирма деньги зарабатывала а не их слюну собирала. Когда они поняв ситуацию перестали скакать как обезьяны на Питон и Линукс, позже набрались опыта с языком и системой, они стали переводить свои ноуты по личной инициативе на Линукс и т.д.

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

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

Неловкость, ИМХО, в синтаксисе. Сложно читать. По виду функции, к примеру, сложно сказать объект какого типа она возвращает. При чтении кода функции необходимо помнить какого типа параметры ей передаются. GIL - вообще капец. О каких больших проектах можно говорить имея такую обузу (костыли не принимаются)?

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

>ЗЫ. Большие проекты делал. Не на питоне. Ибо считаю что на динамических языках большой проект (>200 классов на человека) писать низзя.

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

Посему такие языки в последнее время и востребованы.

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

А вот ежели ракета полетела не туда - тут уж извините ...

Кстати наши в космосе Oberon любят и ценят.

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

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

Понятно. А адрес сайта фирмы корпоративная политика позволяет сообщить? :)

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

> А вот ежели ракета полетела не туда - тут уж извините ...

Ракеты не туда летают как раз на вполне статических языках.

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

>> А вот ежели ракета полетела не туда - тут уж извините ...

> Ракеты не туда летают как раз на вполне статических языках.

Ну если вы имеете ввиду давнюю историю с ошибкой на Фортране и полетом на Марс вроде, то Фортран как ни странно, следует скорее к динамическим языкам отнести.

Ведь именно в изначальном Фортране совсем не нужно было объявлять тип переменной - оно узнавалось по первой буковке.

Ну в те годы это было простительно - перфокарты экономили :)

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

> Ну если вы имеете ввиду давнюю историю с ошибкой на Фортране и полетом на Марс вроде, то Фортран как ни странно, следует скорее к динамическим языкам отнести.

Нет, я про http://en.wikipedia.org/wiki/Ariane_5_Flight_501

Приветик от идиотов, использовавших 16-битные целы и Ада.

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

> Нет, я про http://en.wikipedia.org/wiki/Ariane_5_Flight_501

> Приветик от идиотов, использовавших 16-битные целы и Ада.

Ну тут язык программирования не виноват - это моск ...

Могли бы наверное и арифметику с фиксированной запятой применить - вроде есть она в Ада.

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

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

> Ну тут язык программирования не виноват - это моск ...

Я к тому и веду, что мозгу статические языки (фортрант, кстати, к ним скорее) - совершенно не помеха.

sv75 ★★★★★
()

Питон - это питон. Проклятая быдлоподелка, ниодин вменяемый человек на нем писать не станет, ибо обязательные отступы - злооооъ.

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

> Питон - это питон. Проклятая быдлоподелка, ниодин вменяемый человек на нем писать не станет, ибо обязательные отступы - злооооъ.

Больной, вы опять забыли принять свои вечерние таблетки?

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

> Питон - это питон. Проклятая быдлоподелка, ниодин вменяемый человек на нем писать не станет, ибо обязательные отступы - злооооъ.

Встретил я как-то одного опытного IT шефа, лет так под 40, на одной демонстрации по Питону, в фирме которого только M$ языки используются. Он как увидел разностороннюю демку, так сразу и сказал что будут Питон использовать, потомучто "Там возможностей много, порядок по-умолчанию, с отступами в том числе. Иначе не работает - то что при разработке и сопровождении нужно!".

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

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

Товарищ, на дворе 2008 год - в Lua есть нормальное всё.

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

> А адрес сайта фирмы корпоративная политика позволяет сообщить? :)

Слишком много информации я уже выдал... Потому анонимно и сбрасывал. Так что кроме http://....com предоставить ничего особого не могу :-( Основная область работы - телефония/телекомы, не в СНГ.

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

>> ЗЫ. Большие проекты делал. Не на питоне. Ибо считаю что на динамических языках большой проект (>200 классов на человека) писать низзя.

А что статическая типизация как то помогает одному человеку справится с 200 классами? Не вижу корреляции.

>> Какие именно у него есть достоинства? Чем он хорош? Кроме того что он старше # и "замечательный язык общего назначения"?

Правильный синтаксис, открытость, ясная и простая архитектура и, как следствие, разработка в разы быстрее чем на #

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

Да... А у нас вот ситуация обратная.
Пришло несколько питонщиков нищих на тоненьких от голода ножках.
Я им объяснил, сколько бабла они реально могут огрести на PHP.
Све как один прокляли Ваню Росина или как там его и неперь толстые и довольные гребут деньги лопатой. На питон их не заманишь больше.
ps
Фирма уж слишком известная, чтобы упоминать её имя всуе. Можете от зависти повеситиься, а я добрый. Живите, нищеброды.
pps
Да, езжу на на 2х бентли и на одном мерседесе. Это я так, не для хвастовства а просто пресчитал из окна моей виллы в центре мАсквы.
ppps
да, а на url-ы я могу даже на 2 намекнуть:
1й похож на http://...com
2й на http://...ru
Не говоря уж о всяких итальянских, немецких и британских url-ах.

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

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

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

k0l0b0k, ты не обижайся но уже замучили про эти отступы говорить те, кто в питоне никогда ничего не писал (кроме простых наколенных скриптов). Ради прикола, зайди в интепретатор и введи print 'hello world' с пробелом перед print - узнаешь много нового. Ну попробуй написать, что-нибудь с неправильными отступами - питон пошлет тебя на йух.

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

Ничего там помнить не надо. Функции полчуают и возвращают объекты с ожидаемым интерфейсом, если в переданном объекте нужный интерфейс не поддерживыается, генерится исключение. А вообще нужно писать докстринги, из них а не из public static void main(.... понятно, что делает и что возвращает функция.

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

>А что статическая типизация как то помогает одному человеку справится с 200 классами? Не вижу корреляции.

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

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

Я же уже говорил - все как в Фортране в 60-70 годы прошлого века. Кстати обязательные отступы - отчасти тоже оттуда :)

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

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

>> Питон - это питон. Проклятая быдлоподелка, ниодин вменяемый человек на нем писать не станет, ибо обязательные отступы - злооооъ.

> Больной, вы опять забыли принять свои вечерние таблетки?

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

k = 1

while k < N:

x = x + dx

y=(x*2.1+3.5)/(x*1.5+0.5)

sum=sum + y*dx

k = k + 1

Уж лучше begin-end использовать для явного выделения блока - не правда ли

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

>> Ну вот вам простенький пример программки которая работает совсем не
 так как хотелось из-за того, что человек в двух последних строчках 
отступ не сделал

Отступов вообще не увидел, ну да ладно...
Ну а если бы так:

for(int i = 1; i < 1; i++)
{
    x += dx;
    y = (x*2.1 + 3.5)/(x*1.5 + .5);}
    sum += y*dx;

Тоже не так работает, т.к. скобка не там стоит. Вывод - программер
мудак, и при чем здесь питон?

>> Уж лучше begin-end использовать для явного выделения блока - не 
правда ли

Ну если совсем наплевать на отступы, и даже наплевать на требования
синтаксиса, то тогда и бегин-энды не спасут не правда ли?

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

>Питон - это питон. Проклятая быдлоподелка, ниодин вменяемый человек на нем писать не станет, ибо обязательные отступы - злооооъ.

Видимо в яндексе и гугле невменяемые люди работают...

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

Ну а так:

for(int i = 1; i < 1; i++) { x += dx; y = (x*2.1 + 3.5)/(x*1.5 + .5); sum += y*dx;

Забыл закрыть блок - компилятор тебя обматерит.

А Python отсутствие отступа с благодарностью воспримет.

ЯП должен быть построже с программистом - почаще бить по рукам.

Ибо программист по определению туп и ленив по природе своей.

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

>> Забыл закрыть блок - компилятор тебя обматерит.

У меня блок был закрыт, все путём ;) Кстати, если ты найдешь еще одну ошибку в сишном коде, что я привел, будешь вообще крут :))

>> ЯП должен быть построже с программистом - почаще бить по рукам.

В чем это должно выражаться?

>> Ибо программист по определению туп и ленив по природе своей.

В общем аргументы закончились?

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

> Кстати, если ты найдешь еще одну ошибку в сишном коде, что я привел, будешь вообще крут :))

Здеся что-ли

for(int i = 1; i < 1; i++)

Это к тому, что лучше пользовать foreach ?

Все уходим на Руби и D :)

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

> Кстати, если ты найдешь еще одну ошибку в сишном коде, что я привел, будешь вообще крут :))

Здеся что-ли

for(int i = 1; i < 1; i++)

Это к тому, что лучше пользовать foreach ?

Все уходим на Руби и D :)

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

Ну зачем сразу руби, можно на пых-пых, или vb :)

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

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

1. Эта стадия исполнения называется "unit testing"

2. Unit testing для статических языков - точно так же необходим.

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

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

>1. Эта стадия исполнения называется "unit testing"

Ну тебе-то по должности положено знать, что компилятор ловит ошибки, которые тесты без 100% coverage не ловят в принципе, и даже со 100% coverage - без гарантий. Это не говоря о том, что unit-тесты со 100% coverage - это дополнительная работа, съедающая выигрыш от динамичности.

>2. Unit testing для статических языков - точно так же необходим.

С этим что - кто-то спорит?

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

1. Обязательно попробую. (собсно я давно хотел посмотреть поближе на питон)

>Функции получают и возвращают объекты с ожидаемым интерфейсом, если в переданном объекте нужный интерфейс не поддерживыается, генерится исключение

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

Докстринги вещь хорошая. А просвети темного - можно ли попросить питона _заставить_ программера писать докстринги в каком-либо стандартном формате, что-то типа (#, реально раздутое конечно. m$-style):

/// <summary>
/// Executes stored procedure
/// </summary>
/// <typeparam name="TRow">Type of fetched table row</typeparam>
/// <param name="pProcName">Procedure name</param>
/// <returns>Number of rows fetched</returns>

т.е. чтобы питон следил за тем чтобы все информация о методе была описана?

О. Люди и еще вопрос - а можно ли заставить питон быть статичным? Т.е. чтобы он требовал явного объявления типа?

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

>О. Люди и еще вопрос - а можно ли заставить питон быть статичным? Т.е. чтобы он требовал явного объявления типа?

Есть такое - но для Mono (NET) - называется BOO

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

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

Я и знаю. По должности я так же знаю, что это даже неплохо, на статических языках студенты тесты ленятся писать.

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

> О. Люди и еще вопрос - а можно ли заставить питон быть статичным? Т.е. чтобы он требовал явного объявления типа?

Для непознавших дзен есть boo. Познавшие дзен же знают, что нет никаких типов, поэтому и объявлять их бессмысленно.

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

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

Сторонние приблуды или компилятор разницы большой нет имхо конечно.

>> Докстринги вещь хорошая. А просвети темного - можно ли попросить питона _заставить_ программера писать докстринги в каком-либо стандартном формате, что-то типа (#, реально раздутое конечно. m$-style):

Докстринги это не совсем комментарии, хотя и в такой роли могут выступать конечно. Насчет попросить питона... хм... попросить врядли, а вообще вот http://www.python.org/dev/peps/pep-0257/

>> Люди и еще вопрос - а можно ли заставить питон быть статичным? Т.е. чтобы он требовал явного объявления типа?

нет.

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

> можно ли попросить питона _заставить_ программера писать докстринги в каком-либо стандартном формате

Попросить - нельзя. Написать свои процедуры проверки - элементарно.

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

>> Попросить - нельзя. Написать свои процедуры проверки - элементарно.

Кстати таки да. Ради прикола можно наваять, если не лень будет :)

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

> Да... А у нас вот ситуация обратная.

Интересно было почитать. Никто и не говорил что везде всё подобно.

> Да, езжу на на 2х бентли и на одном мерседесе.

Очень рад за вас, ПХПшников. У меня новенькая третья БМВ. По моему возрасту она мне больше подходит, Мерседес пока не хотел.

> Ну, вы не преживайте, может тоже со временем в люди выбьетесь...

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

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

>ЯП должен быть построже с программистом - почаще бить по рукам.

Именно! Поэтому у Питона больше шансов :)

Написал ты if(...) some();

Потом добавляешь if(...) some(); some2();

опаньки, а фигурные скобки вставить забыл.

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

В Питоне такое - зевнуть невозможно.

...

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

...

У Питона есть свои геморрои, но вот его базовый синтаксис - не геморрой, а плюс.

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

>Ты не можешь так вписать, не заметив ошибку структуры. В отличии от скобочек :)

Замнем - видимо просто мозги привыкли к разному.

Я честно пробовал Питончик с год примерно. Гонял и под Линуксом и под Виндой.

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

Пробовал XMLRPC - не пошло в связке с Виндой.

Пробовал Scientific, GUI пробовал пристраивать - были проблемы совместимости версий - типа нужно не один Питон иметь, а несколько.

В итоге перешел на Руби - и решил все проблемы.

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

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

Сложный вопрос, учитывая, что я "со скобочками" непрерывно программирую где-то с 1992-го и до сих пор :)

...

>Пробовал Scientific, GUI пробовал пристраивать - были проблемы совместимости версий - типа нужно не один Питон иметь, а несколько.

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

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

>Для Руби есть свой Scientific? numpy? matplot?

Да - но по другому называется.

numpy = narray -> http://narray.rubyforge.org/

Там же есть ссылки и на GSL и на Plot.

То что я хотел получить от Питона - я все нашел в Руби.

Причем основная масса нужного - внутри базового пакета, в том числе и DRB - связка руби программок через сетку. Примерно то же я пытался оживить и в Питоне (то же какой-то Распределенный Питон).

Опять же понравилось в Руби как легко делать расширения на С++ - там это естественный процесс и опять же в базовом комплекте.

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

> numpy = narray -> http://narray.rubyforge.org/

> Там же есть ссылки и на GSL и на Plot.

Как-то не впечатляет по сравнению с Python...

> и DRB - связка руби программок через сетку. Примерно то же я пытался оживить и в Питоне (то же какой-то Распределенный Питон).

"Родное" средство - PyRO, ну и CORBA (omniORB) для серьезных парней :)

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

>"Родное" средство - PyRO

А вот его-то я приживлял - не срослось.

Я так понимаю, что просто в неудачное время занимался этим :)

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

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

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