LINUX.ORG.RU

Программирование на Python: Часть 1. Возможности языка и основы синтаксиса

 


0

0

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

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

★★★

Проверено: boombick ()
Ответ на: комментарий от shty

> с массивом так не получится :)

в жаба-подобных с массивом очень даже получится — все объекты приводятся к Object нопремер (интегеры боксятся) :)

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

в данном случае удалённая часть, которая реально с сетью работает, должна закрываться mock-объектом и нет никаких «стотыщ» секунд ожиданий...

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

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

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

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

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

>Такие случаи нужны один раз на пару сотен, а то тысяч строк кода (если, конечно, мы пишем не math-related мусор),

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

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

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

ты прав, злоупотребление туплями до добра не доводит

я делаю так def foo(x, y): class struc:pass r = struc() r.x = x+6 r.y = y+15 return r что с использованием специально для таких случаем написанного модуля (в поставку не входит, это мой хак) выглядит так def foo(x,y): return struc(x=x+6,y=y+15)

#юзаем x = 10 y = 10 x, y = foo(x, y).totuple(«x y») # явно указываем порядок, если надо print x, y #вывод: 16 25

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

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

> и нафиг нужно это замыкание?

Замыкания это способ инкапсуляции данных. Если в ОО подходе данные инкапсулируются в объектах, замыкание это инкапсуляция данных в функции. Функция «замыкает» внешние данные в момент своего объявления и при последующих вызовах работает с ними.

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

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

Это не предположение. Это известный исторический факт. Там в самом деле проводили эксперимент.

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

Нет, как выяснилось, это не замыкания. Советую последний вопрос набрать в поисковой строке google.com. Вы умеете им пользоваться?

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

Не-не-не! Руки прочь! Это мой тролль, и только я буду его кормить!

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

Это не зарезервированное слово, это функция :-). Если честно, писал по памяти, рыться в справочниках было лень.

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

Ну наконец-то тема выведена в нужное направление. Как бы еще к этому всему Лисп прикрутить?

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

документация это для дураков - умные документацию не читают и ставят эксперименты на Production системы не взирая ни на какие запреты - Чернобыль это прекрасно показал %-)

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

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

Если это вас так беспокоит, то в питоне есть отличная штука под названием namedtuple.

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

Не понимаю что вы хотите донести. Вы что в сишарпе тестов не пишите чтоль? Или компилятор как-то избавляет от моков? Вам пытаются сказать что тесты писать придется в любом случае, а 100% покрытие автоматически проверяет все опечатки.

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

>> А можно узнать, чем была вызвана необходимость писать бота на Питоне, если вы прекрасно знаете чистый Си?

изучал распеаренную хрень

Проблема подобная твоей часто встречается у людей начавших изучать распиаренный язык, особенно когда это делается чисто для поднятия ЧСВ)

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

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

Это кто так расчитал? У пейтона нету фигурных скобок и не указывается тип - конец. Я поверю в разницу в 2-3 раза. 10 — завышено пейтонофилами.

Попробуй этот кусочек имплементировать на «плюсах или жабке» (уже выше упоминавшийся):

[(x, y) for x in xrange(0, 100) for y in xrange(0, x) if (x + y)%2]

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

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

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

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

> Тоже самое здесь, <troll>есть вещи и похуже типа Руби</troll>

ну и чем тебе руби не угодил? Мифической медлительностью или красивейшим синтаксисом?

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

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

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

>> Насколько я понимаю, это мнение практика.

Я тоже практик

Практики не «изучают распиаренное говно», а пользуются языком для решения своих задач.

Еще у Питона есть встроенные list comprehensions и generator expressions

И используются они, типа, на каждой строке

Они используются, когда надо.

 — это чтобы разница была в 10 раз, да?

Даже разница в 3 раза, в которую ты «веришь» - это уже значительное достижение :)

а за счет динамической типизации - довольно мощный generic programming.

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

Смешно. Речь шла о многословности, если ты забыл.

Ну и встроенные типы мощнее плюсовых и жабьих.

Например?

Покажи мне _встроенные_ типы кортежей и словарей в Яве и Си++ (встроенных нет, только библиотечные). Теперь сравни многословность употребления этих типов.

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

> Теперь сравни многословность употребления этих типов.

уж доказали, что если взять функциональность С за единицу, то у С++ и жабы будет по 2.5, а у питона целых 6.

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

в жаба-подобных с массивом очень даже получится — все объекты приводятся к Object нопремер (интегеры боксятся) :)

да, да в c# тоже есть тип object, только приведение к этому типу - очень «жырная» по времени операция... только это всё придумки, а в туплях - это элегантная фича «искаропки», понимаете разницу?

Но всё таки лучший подход — сишарповый, через структуры.

omg! я то всегда считал это сишным подходом... а с чего сишарповский вдруг?

> в данном случае удалённая часть, которая реально с сетью работает, должна закрываться mock-объектом и нет никаких «стотыщ» секунд ожиданий...

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

1) в с# тоже надо применять тестирование, без этого никуда

2) да, c# удобный, но не всегда

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

4) f5 (отладка через дебаггер) - не панацея, а о том почему важно тестирование прочитайте тут

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

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

f5 тоже, кстати, не лишена возможности иметь ошибку (в таком разе)

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

документация это для дураков - умные документацию не читают и ставят эксперименты на Production системы не взирая ни на какие запреты - Чернобыль это прекрасно показал %-)

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

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

> если ты намекаешь на dllhell
Нет

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

Брехнище, разница не в том, высоко-, или низкоуровневый.

и в случае с низкоуровневым языком он будет пожалуй похлеще

Брехнище

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

Lumi ★★★★★
()

Хм... Тут gdb python в себя встроил. Очевидно, придеться изучить. Есть мысль облегчить написание юниттестов с помощью gdb и python.

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

ubuntulover> а ЧТО если я буду писать приложение ПО УПРАВЛениЮ кардиостимулятором или ядерНЫМ рЕАКТОРОМ? <...> будущее за моно

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

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

Bioreactor>> корявый синтаксис Педона. Quasar>> Синтаксис питона коряв только для тех, у кого вместо рук ноги.

Сначала я думал что корявее perl'а ничего нет. Но потом я увидел tcl. Долгое время думал, что нет ничего кривее чем tcl. Но недавно я увидел python. Мда....

Очевидно что у меня вместо всех членов тела одни ноги. Такой колобок сороконожка.

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

Mystra_x64> Питон до сих пор без JIT/etc?

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

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

> А пока пиши свои уи-педоноподелки строго под одеялом и только для себя.

Lumi, не думал что ты захочешь вести себя как выфер.

Угадывай дальше.


ну так поясни свою мысль. в контексте «разница не в том, высоко-, или низкоуровневый».

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

ubuntulover> ха-ха, «не осилил» — это стандартная отмазка тролля, когда потроллить хочется, а сказать нечего

Разработчики игры Blade of Darkness с тобой не согласны.

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

> не понял, что мешает написать cmp? сортилке же нужна только эта функция?

Python 3

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

Ладно, согласен, вопрос стиля ;) ИМХО, когда комментариев больше чем кода - хорошо!

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

Не понял, чего неправильного в сортировке с использованием cmp. Сортировка как сортировка. Да, более медленная, так как функция вызывается чаще, не более того.

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

Gukl> Вы гениально продемонстрировали, что миф о великой удобочитаемости Питона - не более чем миф. Не надо писать такие примеры кода, ни на чем.

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

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

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

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

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

ну и чем тебе руби не угодил? Мифической медлительностью или красивейшим синтаксисом?

При всём уважении к Руби могу сказать, что он правда медленнее Питона, это раз. Второе: там не такая сильная стандартная библиотека (хотя и достаточная для повседневных нужд). Там меньше хороших сторонних модулей, как numpy, scipy, pygame и многих других, это три. Там несколько сложнее встраивать сишные расширения, это 4. Из субъективных сторон --- там чистое ООП и на каждый чих нужно писать класс. Я не фанат ООП и предпочитаю писать классы только в случае необходимости, а в большинстве случаев меня функции вполне устраивают.

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

Gukl> Представь простыню, в которой таких строк сотня. И написал их не ты.

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

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

Alesh> А можно узнать, чем была вызвана необходимость писать бота на Питоне, если вы прекрасно знаете чистый Си?

Троллинг вестимо.

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