LINUX.ORG.RU

Guido van Rossum о паттернах в Питоне, своей работе в Гугле и Питоне-3000


0

0

Автор языка Питон, Гвидо ван Россум (Guido van Rossum) рассказывает об использовании паттернов в языке, его особенностях, а также рассказывает о планах развития языка и своей работе в Google.

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

anonymous

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

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

>>a=1 str = ''' qw " we ' sr 'ew ''ewrwe"werw oewrew %s werpwer''' % a

> а вот в Python то, что ты написал - синтаксическая ошибка

Где здесь синт. ошибка(ну не считая пропущенной точки с запятой)?

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

> Где может понаботиться такой "стринг состоящий из 20 двойных и 20 одинарных кавычек"?

Я, может, хочу рисовать ASCII-art пропорциональными шрифтами ;))))

А вообще, спорить с тем, что инлайновые данные в перле определяются проще - глупо.

Как и с тем, что Python лучше работает со списками (list comprehensions, zip), и ООП в нем прямее - зато пришит гвоздями, и Class::MOP хрен сделаешь на нем.

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

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

> x = '"' * 2234

> y = "'" * 4257

> c = "asdgsag" > f = "%(x)s + %(y)s - %(c)s" % locals()

Читабельный, говорите? С "чистым" синтаксисом? Ню-ню ;)

$x = '"' x 2234;

$y = "'" x 4257;

$f = "$x + $y - asdgsag";

Чем хуже-то? Или я чего-то недопонял по незнанию питона?

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

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

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

> зато пришит гвоздями, и Class::MOP хрен сделаешь на нем.

Что это такое можно поведать? И как это он интересно "гвозьдями пришит"?

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

И близко по возможностям перл рядом не стоял. Читаем посты выше. В частности по покрытию спектра задач модулями.

А выразительность перла заканчивается на куче всего по умолчанию (типа <>) и встраиваниии регулярных выражений в текст прораммы с последующим заполнений глобальных переменных результатами совпадений. Что приводит к легкой читаемости, понимаемости и поддержке программ длиннее одного екрана. Хуже fortran77. Все нормальные языки такое поведение исключают (даже фортран) а перл холит и лелеет.

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

> Чем хуже-то? Или я чего-то недопонял по незнанию питона? Да нет, усе верно. Я забыл что в перле тоже так "$x" можно. И в чем тут перл лучше?

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

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

Хорошая идея. Надо будет предложить shape "woman". :)

http://99-bottles-of-beer.net/language-perl-737.html

http://search.cpan.org/dist/Acme-EyeDrops/lib/Acme/EyeDrops.pm

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

> Читабельный, говорите? С "чистым" синтаксисом?

Кстати и что здесь таки грязное и не читаемое?

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

portage, а не ebuild. Ебилды пишутся точно не на питоне =)

Yum на питоне. В последней федорке бэкэнд на сях переписали.

rebarned
()
Ответ на: комментарий от ero-sennin

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

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

Ладно, усложнять задание не буду (присваивание вместо печати и более сложный стринг). :-) Лучше закрою тему на сегодня и пойду рисовать woman shape, надеюсь жена не будет ревновать. :)

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

> Так всё-таки. Ваш эквивалент на Python: > print q{'''''''"""""""};

"'" * 6 + '"' * 3 Встречный вопрос - вы долго считали их после ввода. А как проверили что не ошиблись? Пальчиками пересчитывали или зарубки на экране делали? Это к тому что такие блоки в строке должны генерится что-бы было ясно - там 147 кавычек или таки 148. Иначе на отладке загнешся или следующий кто это будет читать тебя "загнет".

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

> присваивание вместо печати

Тадам! =) Учите Питон.

>>> s = "'''''''" '"""""""'
>>> s
'\'\'\'\'\'\'\'"""""""'
>>>

ero-sennin ★★
()
Ответ на: комментарий от mihalych

Человек, который вместо слова "строка" использует непонятное "стринг" (должно быть, модель нижнего белья) рассуждает о синтаксисе языков програмирования. Думаю, ему лучше не отвлекаться от голых баб, на всякий случай...

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

> Ладно, усложнять задание не буду (присваивание вместо печати и более сложный стринг). :-) Лучше закрою тему на сегодня и пойду рисовать woman shape, надеюсь жена не будет ревновать. :)

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

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

> А почему Питон, а не Пайтон?

Ты ещё спроси почему Лондон, а не Ландэн, или почему паскаль, а не паскал ;)

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

>Так всё-таки. Ваш эквивалент на Python: print q{'''''''"""""""};

Ну и ещё один способ. Фундаментально и в перловом и в питонском случае нужно знать заранее, что в строке нет какого-либо символа. ('}' в приведённом примере). Т.ч. в этом аспекте они одинаковы, хотя в случае '<<' это проще обеспечить (; так и запишем - сила перла в определении строчных констант с большими количествами подряд-идущих кавычек ;).

def q(x): return x.replace('Э','"')

и print q("''''''ЭЭЭЭЭЭЭ")

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

> > зато пришит гвоздями, и Class::MOP хрен сделаешь на нем.

> Что это такое можно поведать? И как это он интересно "гвозьдями пришит"?

В Питоне ровно одна объектная система, "прибитая гвоздями". В перле есть "дефолтная", которая простая но страшненькая, и куча (ну, штуки 4 ;) разных других. В том числе с MetaObject Protocol, как в Common Lisp, и с multiple dispatch тоже есть.

> И близко по возможностям перл рядом не стоял. Читаем посты выше. В частности по покрытию спектра задач модулями.

В смысле, что читаем? Что CPAN это круто? Ну это я и так знаю.

Единственная там реальная претензия - отсутствие numeric/sci - но это довольно узкое применение, все-таки. Просто никогда никому нужно не было.

> А выразительность перла заканчивается на куче всего по умолчанию

Короче, вы его не знаете.

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

> Кстати и что здесь таки грязное и не читаемое?

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

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

$f = '"' x 2243 . "'" x 4257 . 'asdf'

или

x = '"' * 2234 y = "'" * 4257 c = "asdgsag"

$f = "$x$y$c"

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

> man perl | grep more

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

Строчки с большим количеством одинарных и двойных кавычек лучше записывать так:

str = """ab"cd'ef"""

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

> { key1 => "value1", key2 => $value2 } или qw(string1 string_2 one-more-string)

Вообще-то в питоне есть два способа записи:

d1 = { 'a': 'b',
'c': 'd'}

d2 = dict(a='b', c='d')

Причем, вторая запись, пожалуй, более идеологически верна, потому что позволяет вверху перекрыть определение dict'а. Например, на UserDict. Или еще какое требуемое извращение:

from mydict import MySpecialDict as dict

Так что, ваши аргументы вызваны, кажется, простым незнанием питона.



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

> Все эти очень нужные на практике возможности конечно компенсируют отсутствие в перле объектов

Ну-ну... Объектная модель perl'а, в общем, не так плоха, хотя, конечно, синтаксически довольно коряво выражена...

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

> и ООП в нем прямее - зато пришит гвоздями

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

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

Кто там хотел три кавычки подряд? Я не понял, а в чем проблема? ======= >>> str="\"\"\"" >>> print str """ =======

PS Это было на питоне если кто не понял.

anonymous
()

Редакторы, где вы нашли "подробности" ?!

Автор новости рассказывает о том, что он узнал интересного из выступления Guido van Rossum. А где текст самого выступления ?

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

>А где текст самого выступления ?

Все равно по ссылкам никто никогда не ходит %-) Главное же другое, холивар %)

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

> portage, а не ebuild. Ебилды пишутся точно не на питоне =)

Главное, что меня поняли.

> Yum на питоне. В последней федорке бэкэнд на сях переписали.

То-то я смотрю, поговаривают, что он быстрее стал ;-)

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

> f = "%(x)s + %(y)s - %(c)s" % locals()

> Не руби конечно но в перле с этим IFAIK ваше голяк - да?

Интерполяция (включая массивы и результаты вызовов функций), иногда sprintf.

> Все эти очень нужные на практике возможности конечно компенсируют отсутствие в перле объектов,

О чем ты? http://www.netalive.org/tinkering/serious-perl/

> кучи библиотек, хоть сколь-нить близких аналогов Django и Zope,толковых RPC.....

Значит на http://search.cpan.org одна обманка?

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

> Никак, кроме конкр. извращений, вторую копию сделать не удасться.

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

> В питоне все - объект в том числе и модуль.

Похоже, таки проспал :-(. Покажите, плиз, пример, как переменной присвоить значение объект класса "модуль"?

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

Все остальное -- чистая идеология.

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

> Или в Питоне уже открыт волшебный способ присвсваивать
переменным значения типа "модуль"?

Ы?

>>> import sys as blablabla
>>> andnowforsomethingcompletelydifferent = blablabla
>>> andnowforsomethingcompletelydifferent.stdout.write('Или я чёто п?\n')

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

> Говорить, что какой-то из этих языков намного лучше - глупо,

При этом еще не зная возможности одного из них.

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

В общем, +1.

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

> Единственная там реальная претензия - отсутствие numeric/sci - но это довольно узкое применение, все-таки.

pdl

amm
()
Ответ на: комментарий от ero-sennin

> Синглетон - это костыль, хотя и остроумный.

Вполне согласен. Синглетоны были нужны в VB, где не было ни статических атрибутов, ни множественного наследования. Когда контора съезжала на C#, я пропихнул архитектурный стандарт использования утилит вместо модулей. А если бы в C# или Java было нормальное множественное наследование, так и утилиты бы не понадобилось -- хватило бы статических примесей. Кстати, Python, кажется, тоже допускает множественное наследование, и там тоже можно использовать механизм примесей.

> когда любой модуль - уникальный объект

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

eugine_kosenko ★★★
()

Не ради флейма, а дабы уразуметь.

Как в питоне будет выглядеть перловое :

while (<>) { ...... }

или в питоне только через open(stdin) ???

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

> Модуль, после того как он импортрирован, это объект

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

> Доступ к объекту import mysingleton

Это было бы так, если бы я мог написать:

a = import mysingleton

a.my_routine

Вы упираете на то, что многократный вызов import не приводит к многократной инициализации объекта, и с этим я не спорю. Но вот то, что Вы не можете мне после инициализации предъявить объект, проинициализированный вызовом import, говорит о том, что это таки не синглетон, а утилита. Еще раз: у синглетона гарантируется существование ровно одного экземпляра. У утилиты гарантируется полное отсутствие экземпляров вообще.

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

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

Зачем вам такой изврат? Или цель именно потрахаться? :) Ну если сильно хочется, переопределяйте __new__ или используйте Borg с различными словарями для каждого значения параметра, кто запрещает? Хотя сколько лет живу, ни то, ни другое до сих пор не понадобилось.

PS Множественное наследование есть.

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

>>> import sys as blablabla
>>> andnowforsomethingcompletelydifferent = blablabla
>>> andnowforsomethingcompletelydifferent.stdout.write('Или я чёто п?\n')

Убедили :-).

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

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

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

import mysingleton

a = mysingleton
b = mysingleton

или так

a = __import__('mysingleton')

Параметров конструктору действиельно не передать, для таких случаев
можно воспользоваться Borg-ом или использовать труъ сиглетон, это
сводится к написанию:

class MySingleton:
    __metaclass__ = Singleton

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

>208 sh

>128 perl

>16 bash

>12 python

>2 ruby

>2 env

>1 csh

И только два рубиновых скрипта незыблемы ) Это, я так понимаю, в Амароке ? )))

e-max
()
Ответ на: комментарий от eugine_kosenko

> Осталось показать возможности наследования модулей, чтобы описать некий абстрактный модуль, затем унаследовать от него другой, создать его и использовать, как синглетон :^)

Ну модуль, всё-таки, не класс. :) Если надо наследовать одно от другого, можно в "базовый" модуль поместить базовый класс, а при инициализации модуля создавать его объект. "Дочерний" модуль будет импортировать из "базового" модуля базовый класс, наследовать от него свой класс и создавать при инициализации его объект. Модули здесь - просто контейнеры, гарантирующие уникальность.

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