LINUX.ORG.RU

Питон как средство обучения


0

0

Питон хорош как средство обучения, но не как средство создания промышленных приложений -- заявляет Ник Наглый (Nick Nagley) со страниц газеты Computer Weekly, отмечая при этом что новичков в python привлекает в основном простота и ясность языка, которым отдается предпочтение перед скоростью.

На скорость работы программ написанных на этом скриптовом языке также жалуется ведущий разработчик Google Ng Pheng Siong http://sandbox.rulemaker.net/ngps/195

>>> Подробности (шокирующей длины URL)

anonymous

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

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

> 2) Записи хэшей не показались элегантными (чистыми). Перловые удобнее: { Value => 100, Param => 200 } без всяких гребанных кавычек.

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

a = { 'Value' : 100, 'Param' : 200 }

либо использовать встроенный конструктор dictionary:

a = dict(Value = 100, Param = 200)

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

>> Think of Java. Причем, с точностью до особенностей каждого из базовых типов.

>Пожалуй, объяснение с boxing/unboxing более правильное. Хотя, вероятно, и менее удобное для запоминания :-)

У! Нету в питоне боксинга! Просто привыкли уже, что должен быть, а его нету :) Есть mutable типы, на которые делаются ссылки, и immutable, и нам наплевать, ссылки это или передача по значению, поскольку менять объект нельзя

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

>>
s1 = 'a\'b"c'
s2 = "a\"b'c"
s3 = """a"b'c"""

И это Вы называете чистым синтаксиcом? Ничего Гвидо не мог придумать умнее тройных кавычек?

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

>А, если где-то нет, что мешает установить и использовать? Опять религия?

религия вендора дистра. :)

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

>Если дистрибьютор ставит Perl в basesystem, то использовать надо только Perl? И кто после этого секта? :D

не _надо_, а _можно_.

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

А чем он грязен то? Тройные кавычки внутри которых не надо думать про одинарные кавычки - явный гуд.

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

>> backslash, как делают все нормальные люди, теперь недоступен?

Не знаком с таким понятием "рассыпанная коробка с зубочистками"?

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

Еще вопрос.
Интерполяции переменных в строках в Питоне похоже нет?
($a, $b, $c) = ("long", "live", "Perl");
$d = "Very $a $b, my beloved $c";

В питоне это:
d = "Very "+a+" "+b+", my beloved "+c

Так?

>>Тройные кавычки внутри которых не надо думать про одинарные кавычки - явный гуд.
>>Лексема "строка" всегда строка, и от контекста применения это, слава богу, не зависит

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

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

> > > Что же такого в питоне есть для интернет-сценариев? Может там изначально встроены какие то средства защиты, типа restricted python?

> > "Изначально средств защиты" нет нигде. Включая, увы и ах, самые модные и раскрученные _языки_. А вот в качестве навесков, фрэймворков и сторонних либ - запросто.

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

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

> Изначально можно было бы ввести public и private функции и переменные в интерфейсах, модулях и объектах, как это сделали в том же restricted python. Тогда можно было бы говорить о какой то ориентации применения языка. А без этого получаем второй PHP...

Изначально надо вводить, _там где это уместно_, то есть, в многопользовательских средах программирования, rule based acls. А во всех остальных местах эти ACLs будут только мешать.

> так zope. его ведь можно было бы и на php написать...

Если бы бабушка имела яйца, она была бы дедушкой.

> Ну стало быть не так уж сильно у меня крыша подтекает...

Не принимайте это так сильно на свой счет.

> К сожалению хуже, чем требуется и даже чем могли бы. В них отсутствует единый фреймворк, либы и хелперы. Просто набор биндингов в kudzu etc и набор скриптов, дергающих эти биндинги. Слабо для такой конторы, как редхат...

Ну, это, конечно, проблема. Наверное. Если единый мегафрэймворк действительно нужен. попробуйте помедитировать над этим.

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

Алексей, вы говорите очевидную глупость. Что есть "системные средства"? Ядро? Ядро + libc? Ядро + libc + позиксовая обвязка? А с чего это вы решили что bash + sed + awk + еще хренова гора текст- и файлутилз лучше, чем интерпретатор некоторого языка общего назначения, что бы это не значило? Я хуже скажу, это точно хуже, если говорить о качестве кода и скорости его выполнения. Да и размер, в итоге, будет сравнимый, если не больший.

> Недавно наткнулся на гадость. rpm -ta tarbol.gz работает из баша, а вот os.system("rpm -ta tarbol.gz") или popen2.popen2("pm -ta tarbol.gz") выдает ошибку. В чем дело, так и не понял.

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

> Про пион в альт я ничего, Алексей, вам неизвестного, не добавлю.

Алексей. Извините, конечно, но со мной вы этот вопрос, увы, не обсуждали. Так что, для меня ваши претензии по-прежнему загадка. А полиси - это единственный известный мне способ навести порядок в каком-либо вопросе. О качестве полиси и его отдельных пунктах можно говорить [много], но подход Андрея представляется мне, по меньшей мере, последовательным.

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

>> a = dict(Value = 100, Param = 200)

А если чтото посложнее:
{
Values => { Val1 => 10, Val2 => 20 },
Params => { Pa1 => 101, Pa2 => 201 }
}
И тд? С глубокой вложенностью?

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

> В питоне это:

> d = "Very "+a+" "+b+", my beloved "+c

Ну, можно и так. Но лучше так (в стиле printf):

d = "Very %s %s my beloved %s" % (a, b, c)

(понятное дело, что может быть не только %s, но и %03d, %.2f итп. man 3 printf, ну с поправкой на местные условия ;-) )

Или даже так:

d = { 'a': 'string', 'b': 1, 'c': 2 }

s = 'very %(a)s %(b)s my beloved %(c)s' % d

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

Ответ на претензии

> Не уяснил: > 1) В питоне есть ссылки?

Да. Одно из основных понятий.

> Или нет как таковых переменных, содержащих данные и всё (любая, даже простая переменная) есть ссылка на эти данные?

Да.

> 2) Записи хэшей не показались элегантными (чистыми). Перловые удобнее: { Value => 100, Param => 200 } > без всяких гребанных кавычек.

1. В Перле такая запись не вызовет неоднозначности: если нет $, значит строка. В Питоне в подобном случае {Value : 100, Param : 200} Value и Param будут восприняты как имена переменных.

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

3. dict(Value = 100, Param = 200)

4. Где кавычки, где $ и т. п. IMHO не принципиально.

> 4) Как насчет анонимных функций в сложных типах данных:

lambda Запись подлиннее будет, но, опять же, IMHO не принципиально.

> 6) А вот отсутсвие объявлений переменных не порадовало > my $a, $b; -- рулят.

Переменные в Питон по умолчанию локальные. Если вы пишете в функции aaa = что-то и aaa не существует в локальном пространстве -- она создаётся как локальная. Если при этом существует глобальная aaa, она не затрагивается.

Использовать несуществующую переменную Питон вам не позволит.

А объявления как в Си и Паскале бессмысленны для языка с динамической типизацией.

> 7) Есть какието операторы закавычивания qq { } ?

Нет

> 6) swith-case есть?

Нет. if-elif-...-else, а, ещё лучше, словарь ссылок на функции (как, впрочем, и в Перле).

У меня тоже остались хорошие впечатления от Перла. Но Питон понравился больше.

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

Не выходящее за пределы " и ' ? Попробуйте ;-)

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

>Еще вопрос.
>Интерполяции переменных в строках в Питоне похоже нет?
>($a, $b, $c) = ("long", "live", "Perl");
>$d = "Very $a $b, my beloved $c";
>В питоне это:
>d = "Very "+a+" "+b+", my beloved "+c

Так?

python|>>>a=3
python|>>>b="qwer"
python|>>>c=[1,'rty']
python|>>>d=1.4556789
python|>>>e=1234567890000000000000L
python|>>>print """
python|...Оппаньки %i щас чо-то случица! \n %s %s %f.4 %i
python|...""" % (a,b,str(c),d,e+1)
python|
python|Оппаньки 3 щас чо-то случица!
python| qwer [1, 'rty'] 1.4557 1234567890000000000001
python|

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

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

Ну, кроме очевидной необходимости в улучшении читабельности кода ;-)

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

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

Только, когда для этих типов недоступно преобразование __str__.

>>> a = 1.1
>>> b = float(0)
>>> c = 0
>>> d = [1, 2]
>>> '%s, %s, %s, %s' % (a, b, c, d)
'1.1, 0.0, 0, [1, 2]'
>>>

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

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

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

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

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

В смысле, чтобы было

c = 1
c = 2
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: object doesn't support item assignment

?

Насколько я понимаю, в рамках языка - нет.

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

>exec('y=0\nfor i in (1,2,3):\n\ty+=i\nprint y')

Впечатлен. Еще немного - иной регэксп проще станет.

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

>Недавно наткнулся на гадость. rpm -ta tarbol.gz работает из баша, а вот os.system("rpm -ta tarbol.gz") или popen2.popen2("pm -ta tarbol.gz") выдает ошибку. В чем дело, так и не понял. cvs co работает, tar -czf... тоже, а вот rpm -ta почемуто нет. Можно ли доверять такому системному средству?

Есть же либа rpm-python, почему бы не использовать ее ?

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

если хочется совсем уж перловой интерполяции переменных, можно делать так:

>>> a,b,c=10,1.22,complex(10,20)
>>> print "A: %(a)s B: %(b)s C: %(c)s"%locals()
A: 10 B: 1.22 C: (10+20j)

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

> а rpm везде есть, даже в слаке

гыыы. в gentoo rpm нетуть. ;-) ebuild существует конечно, но если кто его и ставит, убей меня - по-любому не пойму зачем это... даже если какой-либо софт распространаяется только в rpm, это тянет за собой всего лишь маленькую rpm2targz

anonymous
()

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

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

какой такой такой-же чисто ООП такой-же и чисто алгоритмический такой-же или без гемороев такой-же как учат, на паскале?

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

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

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

ЗЫ джентой давно не пользуюсь

anonymous
()

модератору (или кто за него) - нельзя ли сообщения к-е по делу таки оставлять? Ветку махануть конечно проще, я понимаю...но как странно получается....

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

про rpm-python я при переходе от башевого скрипта к питону как-то забыл.

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

непереношу првнхов. последний пост действительно по делу. если он твой - сорри - перепость :)

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

Нуууу батенька.... слов нету. Я с душой писал, экспромтом, блин........

Короче 1 Для решения разных задач отимально подходят РАЗНЫЕ языки. Универсальных языков нету (так же как нету универсальных ОС, даже у вин. своя ниша)

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

Можно спорить о том что более удобно - забивать гвозди молотком или крутить шурупы шуруповертом. Но глупо спорить о том что более неудобно - забивать гвозди шуруповертом или крутить шурпы молотком. Аналогимя я надеюсь ясна?:-)

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

>> a = dict(Value = 100, Param = 200)

> А если чтото посложнее: > { > Values => { Val1 => 10, Val2 => 20 }, > Params => { Pa1 => 101, Pa2 => 201 } > } > И тд? С глубокой вложенностью?

Аналогично:

a = dict(Values = dict(Val1=10, Val2=20), # и т.д.

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

Вот отсутствие объявлений переменных вроде my $self - это неудобство. А со словарями всё нормально, удобно.

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

> В смысле, чтобы было

> c = 1 c = 2 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: object doesn't support item assignment

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

anonymous
()

> Вот отсутствие объявлений переменных вроде my $self - это неудобство.

Насколько я понимаю, такие объявления - вынужденная мера, т.к. в Перл переменные по умолчанию глобальные (что плохо). В Питоне переменные в функциях локальны, след-но такие объявления вобщем-то не нужны.

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

для отлова таких опечаток существует скрипт pychecker, идет в дистрибутиве.

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

> ввести public и private функции и переменные [...] А без этого получаем второй PHP...

Третий и четвёртый ты хотел сказать. Но не пятый. В пятом это есть.

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

>насчет замены баша питоном тоже сомнения. Недавно наткнулся на гадость. rpm -ta tarbol.gz работает из баша, а вот os.system("rpm -ta tarbol.gz") или popen2.popen2("pm -ta tarbol.gz") выдает ошибку. В чем дело, так и не понял. cvs co работает, tar -czf... тоже, а вот rpm -ta почемуто нет. А ты глянь на всяческие переменные окружения. Есть вариает, что не находится rpm, либо он не видит то, что ему надо, либо ещё чего. А ешё лучше скажи popen2.popen2("strace rpm -ta tarbol.gz") и посмотри, где ему плохеет.

>Можно ли доверять такому системному средству? ORB, это не сюрприз, как и soap. еще бы его все понимали...

Говоришь, как только что с винды сполз: "могу ли я доверять блендамеду, после того, как перекусил медную проволоку?". Я исходники смотрел, в popen2 всё аналогично сишному popen сделано. Если popen'у доверяешь, доверяй и popen2 :)

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

>а насчет мало кто им пользуется - щас тут набежит толпа поклонников FC (с анакондой), Gentoo (portage).

Еще, как я слышал, yum тоже на Python написан, так что и поклонники ASPLinux присоединятся :))

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

>да, вспомнил еще - карамба

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

php-coder ★★★★★
()
Ответ на: комментарий от AVL2

>В альте питон оскопирован и поруган уже больше года и ничего.

Где именно в Альте? Подписан на community@ и читал про Питона только лестные отзывы...

php-coder ★★★★★
()
Ответ на: комментарий от CybOrc

>... или анонимный аналитик lor по сравнению с Линусом Торвальдсом.

Вспоминается цитатка:

>а Линус читает ЛОР?
Обязательно. Больше половины анонимных постов -- его.
-- ShurkaBurka (linux.org.ru)

:)))

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

>5) Как чуть чуть Перловику, уставшего от нагромождений $ чистый питоновский синтаксис симпатичен.

ДАа... согласен... вот в С/С++ тоже без знака доллара обходятся... и код мне кажется выглядит очень красиво... тонкий такой, стройный :о))

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

>P.S. Я бы понял еще, если бы в качестве "языка для обучения программированию" назывался какой-нибудь оберон или модула, всяко приличнее, чем голимый паскаль.

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

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

Re:

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

Вы хотели сказать, наверное, два креста?

Если обучать _кодированию_, то да, наверное. А если программированию - то нет.

AlexM ★★★★★
()
Ответ на: Re: от AlexM

Re:

> Если обучать _кодированию_, то да, наверное. А если программированию - то нет

Парадокс в том, что _научить_ можно как раз только кодированию (как
ремеслу). А программировать научить нельзя. Это врождённый талант,
который относится к искусству ;)

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