Разбирался с Trac, в результате столкнулся с Python — ом. Возник обычный вопрос. Зачем нужен Python (или другой язык), если тотже С++/C# могут тоже самое, если не больше? Есть куча похожих языков, зачем они? У них же практически одинаковые возможности. Может у Python-а есть какие-то решающие преимущества, что его надо быстрее учить?
nikda,
N>Разбирался с Trac, в результате столкнулся с Python — ом. Возник обычный вопрос. Зачем нужен Python (или другой язык), если тотже С++/C# могут тоже самое, если не больше? Есть куча похожих языков, зачем они? У них же практически одинаковые возможности. Может у Python-а есть какие-то решающие преимущества, что его надо быстрее учить?
Вопрос идеально подходит для виртуального форума по динамическим языкам.
Здравствуйте, nikda, Вы писали:
N>Разбирался с Trac, в результате столкнулся с Python — ом. Возник обычный вопрос. Зачем нужен Python (или другой язык), если тотже С++/C# могут тоже самое, если не больше? Есть куча похожих языков, зачем они? У них же практически одинаковые возможности. Может у Python-а есть какие-то решающие преимущества, что его надо быстрее учить?
С++ — усилий для написания необходимо несравнимо больше.
C# — вопрос не корректен, хотя бы уже потому, что C# появился позже Python-а.
N>Разбирался с Trac, в результате столкнулся с Python — ом. Возник обычный вопрос. Зачем нужен Python (или другой N>язык), если тотже С++/C# могут тоже самое, если не больше?
N>Есть куча похожих языков, зачем они?
И правда, все императивные похожи друг на друга как две капли, да и функциональные все на одно лицо. Хватило бы двух языков, наверное. Надо ввести суровые наказания для разработчиков новых языков, вплоть до пожизненного кодинга гуя на дотнете.
N>У них же практически одинаковые возможности.
Ну действительно — все они Тьюринг-полные.
Действительно, зачем Python в начале середине-девяностых, когда есть C# в начале двухтысячных?
Кстати, почему мы бы вам не написать Trac на С++, раз он может все тоже самое, что Python?
Я думаю, разницу почувствуете сполна.
N>Может у Python-а есть какие-то решающие преимущества, что его надо быстрее учить?
Ну если если есть пара свободных часов, почему бы не выучить.
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>nikda,
N>>Разбирался с Trac, в результате столкнулся с Python — ом. Возник обычный вопрос. Зачем нужен Python (или другой язык), если тотже С++/C# могут тоже самое, если не больше? Есть куча похожих языков, зачем они? У них же практически одинаковые возможности. Может у Python-а есть какие-то решающие преимущества, что его надо быстрее учить?
LCR>Вопрос идеально подходит для виртуального форума по динамическим языкам.
Нет, поскольку он касается не только динамических языков, а Python vs С#/C++.
Здравствуйте, nikda, Вы писали:
dmz>>Ну если если есть пара свободных часов, почему бы не выучить.
dmz>>См. Eric Raymond, Why Python?
N>Я правильно понял, что преимущества Python — в простоте? А чем он проще?
dmz>>См. Eric Raymond, Why Python?
N>Я правильно понял, что преимущества Python — в простоте? А чем он проще?
Статью все же советую прочитать, Рэймонд хорошо пишет. Дело не только в простоте.
Врядли можно сказать, что Perl проще C++, однако разработка определенных вещей на
Perl займет меньше времени, чем их аналогов на C++
Достоинство языков более высокого уровня над языками низкого уровня в том,
что они позволяют сделать больше, написав меньше.
При этом, они не должны быть проще — см. функциональные языки и perl.
Достоинства Python в том, что он существует давно, под него есть очень много готового к
использованию кода — библиотеки, компоненты, биндинги, middleware и проч., и что он существенно
лучше подходит для написания сложных проектов в силу намного лучшей читабельности чем Perl, и
что он (пока?) более зрелый и производительный, чем Ruby.
Здравствуйте, dmz, Вы писали:
dmz>Достоинства Python в том, что он существует давно, под него есть очень много готового к dmz>использованию кода — библиотеки, компоненты, биндинги, middleware и проч., и что он существенно dmz>лучше подходит для написания сложных проектов в силу намного лучшей читабельности чем Perl, и dmz>что он (пока?) более зрелый и производительный, чем Ruby.
Насколько я понимаю, это не единственное отличие. Второе — концептуальное: Ruby "думает" как Perl ("there is more than one way to do it"), а Python — наоборот. Эту информацию можно найти в Факах соотв. языков.
Избыточное цитирование удалено. Прошу избегать этого в дальнейших сообщениях.
Мой ответ — лаконичность. Т.е. объем осмысленного кода, который необходимо написать для решения определенной задачи.
Как показывают тесты,
Питон и Руби в среднем в два раза лаконичней, чем С++/С#.
Приведу простой пример, правда на Руби и Перле, т.к. с Питоном не знаком.
Программа, которая находит в текущем каталоге все JPG файлы, ищет в них дату и время съемки и переименовывает файл согласно этой дате и времени. Нужна для сортировки фоток, особенно снятых разными фотиками.
На Руби такая программа выглядит так:
DM>for(<*.jpg>) { open F, $_; binmode F; read F, $s, 512; close F; $s=~/[\d+:\s]{19}/ and (($s=$&)=~s/:|\s/_/g) and rename $_, $s.'.jpg'}
DM>
DM>Думаю, на Питоне тоже нечто похожее. DM>А теперь напишите ее на С++/С# и сравните объем кода.
На питоне как-то так:
[shutil.move(x,re.sub(':','-', re.search(r'([\d+:\s]{19})', file(x).read(512)).group(1)+'.jpeg')) for x in os.listdir('.') if re.search( r'.jpe?g$',x,re.IGNORECASE)]
только вот регекспа [\d+:\s]{19} я что-то не осилил — не встречается его в моих джипегах. То есть где-то он может и есть, а где-то его может и нет — то есть некорректно, плюс я поправил маску файла — в юниксах оно может быть в разном регистре, плюс есть jpeg a есть jpg.
при этом импорт модулей оставлен за кадром, впрочем его можно сделать снаружи, в комм. строке или сделав соответствующий профиль для ipython, при этом строку можно сделать гораздо короче, поступив как-то так:
# где-то в профайле:
from re import search as s
from re import sub as sub
from re import IGNORECASE as IC
from shutil import move as mv
from os import listdir as ls
...
[mv(x,sub(':','-', s(r'([\d+:\s]{19})', file(x).read(512)).group(1)+'.jpeg')) for x in ls('.') if s( r'.jpe?g$',x,IC)]
но в принципе, python стремится к несколько большей verboсity чем perl, зато его конструкции невозможно забыть.
питоновые приведения типов и выяснение, когда что передается по ссылке, а когда по значению, а так же всякие $&, $_, $:, $* и прочее забываешь постоянно, даже когда часто работаешь с ним. Блин, как вспомню все эти *@{$qq->{bebe}}
и гиморы со ссылками и значениями, и разницы между {q}{q} и {q}->{q}
N> Зачем нужен Python (или другой язык), если тотже С++/C# могут тоже самое, если не больше? Есть куча похожих языков, зачем они? У них же практически одинаковые возможности. Может у Python-а есть какие-то решающие преимущества, что его надо быстрее учить?
А зачем учить С, если есть asm? У них же практически одинаковые возможности. :D
dmz>только вот регекспа [\d+:\s]{19} я что-то не осилил — не встречается его в моих джипегах. То есть где-то он может и есть, а где-то его может и нет — то есть некорректно,
Как минимум фотоаппараты Nikon и Canon пишут в файл дату вида "2006:08:13 15:59:18", ее-то и ищет программа.
Если не находит, то файл не переименовывает (это уже заложено в приведенных исходниках).
Вопрос к знатокам питона, для чего он предназначен\заточен можно ли на нем написать например PIM или почтовый клиент?
Просто до недавнего времени думал что это вообще язык для веба типа пхп
Здравствуйте, TNikolay, Вы писали:
TN>Вопрос к знатокам питона, для чего он предназначен\заточен можно ли на нем написать например PIM или почтовый клиент? TN>Просто до недавнего времени думал что это вообще язык для веба типа пхп
Ну как пример PIM'a
TN>Вопрос к знатокам питона, для чего он предназначен\заточен
динамический интерпретируемый язык общего назначения. пишите что хотите.
TN>можно ли на нем написать например PIM или почтовый клиент?
можно: wxPython, PyQt, PyGTK.
TN>>Вопрос к знатокам питона, для чего он предназначен\заточен dmz>динамический интерпретируемый язык общего назначения. пишите что хотите.
а как со скоростью выполенния? ака джвава?
Здравствуйте, nikda, Вы писали:
N>Возник обычный вопрос. Зачем нужен Python (или другой язык), если тотже С++/C# могут тоже самое, если не больше? Есть куча похожих языков, зачем они? У них же практически одинаковые возможности.
Недавно был в магазине бытовой техники. Видел 15 моделей электрочайников. Зачем они, у них же практически одинаковые возможности?
С утюгами и стиральными машинами — та же фигня
З.Ы.
А электрочайника, который бы меня абсолютно полностью устроил я все равно так и не нашел..