?

Log in

No account? Create an account
программистское, python - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

программистское, python [май. 17, 2009|12:21 am]
Anatoly Vorobey
Я наконец начал писать на Пайтоне. Но, по-моему, пишу в нем пока что в стиле Перла.

Из того, что не нравится:

- это ненормально, когда в языке есть встроенная функция open(), а встроенной функции close() нету. Есть в этом что-то извращенное.

- основной аргумент поклонников Пайтона - что в нем все продумано, логично, и на все есть один логичный способ это сделать, в отличие от Перла, где все можно сделать сотней разных способов. Но при приближении к объекту начинают бросаться в глаза трещины и морщины. Меня поразило количество встроенных в язык путей интерполировать значение внутри строки: 1) синтаксис %s и оператор % 2) синтаксис {0} и метод str.format() 3) синтаксис $x и класс string.Template. При этом все три способа оказались недостаточно мощными для моих достаточно скромных целей.

- какая-то фигня с Юникодом происходит. print не умеет выводить ничего, кроме байтов; нет способа объяснить ему, что юникодные строки надо выводить всегда в такой-то кодировке. Поэтому печать utf-8 строк либо включает в себя кучу вызовов decode() практически на каждую строку, либо пользуется менее удобными функциями, чем print.

В целом язык приятный. К significant whitespace привыкаешь очень быстро, и к {} обратно не тянет. Вообще синтаксис очень легкий, простой и интуитивный в большинстве случаев. Посмотрим, что он еще расскажет.
СсылкаОтветить

Comments:
[User Picture]From: xxqs
2009-05-16 09:59 pm
а ещё куча библиотек под питон заточена на линукс - особенно те, что линкуются с native libraries, например, для сетевых вызовов.
Портировать этот зоопарк, например, на солярис - это сплошные танцы с бубнами.

в общем, если есть возможность не использовать пайтон, то я и не использую :)
(Ответить) (Thread)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]From: unbe
2009-05-16 10:02 pm
а еще раздражает self и __такие__ методы
(Ответить) (Thread)
(Удалённый комментарий)
[User Picture]From: avnik
2009-05-16 10:03 pm
f=open('spam')
f.write('eggs\n')
f.close()
Вполне себе есть.

open (он же file) правильнее рассматривать как конструктор, а не как функцию.

PS Кстати %s может быть и %(key)s -- тогда правый аргумент % трактуется как dict
(Ответить) (Thread)
[User Picture]From: unbe
2009-05-16 10:09 pm
конструктор - это, например, в ruby, а здесь натурально built-in function. Вместе с другими built-in functions типа len() вызывает некоторое недоумение.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: _nik_
2009-05-16 10:11 pm
А можно подробнее про фигню с юникодом? Файл начинается ли с чего-либо вроде следующего:
#!/usr/bin/env python2.5
# -*- coding: utf-8 -*-

?
(Ответить) (Thread)
[User Picture]From: avva
2009-05-16 10:15 pm
это ничего не дает, кроме того, что можно literals внутри исходников на utf-8 писать. Конкретно, добавьте к вашим двум строчкам

a = u"не работает"
print a

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-4: ordinal not in range(256)

(Ответить) (Parent) (Thread) (Развернуть)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]From: amarao_san
2009-05-16 10:30 pm
Самое интересное там начинается в районе функционального программирования. Итератор, возвращающий функции - это же круто!
(Ответить) (Thread)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]From: alexeybobkov
2009-05-16 10:57 pm
К significant whitespace привыкаешь очень быстро, и к {} обратно не тянет

Но в Хаскеле ещё лучше :)
(Ответить) (Thread)
From: 9000
2009-05-16 11:46 pm
У Хаскеля порог вхождения много выше.
Питон всё же разрабатывался изначально как язык для обучения. (И до сих пор отлично подходит.)
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: nec_p1us_u1tra
2009-05-16 11:02 pm
Мой первый большой бумц в питоне случился с достаточно простым объектом -- списком списков. Оказывается присваивание в питоне это shallow copy 8( полдня ловил этот прикол.
(Ответить) (Thread)
From: 9000
2009-05-16 11:51 pm
Есть ещё классический прикол, когда значением параметра по умолчанию делается mutable объект: он же между вызовами сохраняется!
>>> def foo(p, x={}):
...   x[p]="used up"
...   return x
... 
>>> foo(1)
{1: 'used up'}
>>> foo(2)
{1: 'used up', 2: 'used up'}
>>> _
(Ответить) (Parent) (Thread)
[User Picture]From: nechaman
2009-05-17 05:12 am

Не программисткое

"есть встроенная функция open(), а встроенной функции close() "
Когда подумаешь о всем нашем мире, то наверное такое и неплохо.
(Ответить) (Thread)
[User Picture]From: kzn
2009-05-17 07:21 am
Знаю, наверное глупо спрашивать, но
1. локаль стоит?
2. случайно ли не ipython -- у него есть некоторые проблемы с юникодом.


Вообще, язык очень приятный. Как многие замечали, в чем-то похож на lisp.
И что хорошо -- есть куча различных библиотек + высокие возможности интеграции с C и C++ -- тот же boost.python.
(Ответить) (Thread)
From: pesec
2009-05-17 08:36 am
А ещё, а ещё -- в нём есть Глобальный Лок, и один инстанс питона не может кушать больше 100% одного процессора.
(Ответить) (Thread)
[User Picture]From: eterevsky
2009-05-18 10:18 am
Над этим работают.
(Ответить) (Parent) (Thread)
[User Picture]From: bolk
2009-05-17 08:39 am
Про продуманность, это байка. В интернетах можно найти статьи с критикой, там можно увидеть сколько непродуманных мест в языке, причём в Python3 мало что изменится.

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

Кстати, встроенный close и не нужен. Достаточно удалить объект.
(Ответить) (Thread)
[User Picture]From: _nik_
2009-05-18 09:33 am
> причём в Python3 мало что изменится.

А почему в будущем времени? python 3 давно уже вышел, готовится к выпуску 3.1…
(Ответить) (Parent) (Thread) (Развернуть)
From: hml
2009-05-17 11:07 am

Stackless и Nagare

Кстати, очень советую обратить внимание на Stackless Python и построенный на его основе фреймворк Nagare. Если кратко, то в stackless добавляются легковесные нити и продолжения, а Nagare очень органично использует их для сохранения/восстановления состояния web-приложения, так что логика программирования для web становится абсолютно такой же, как и для обычного приложения.
А как там можно генерировать html! Например:

with h.table(border=1):
with h.tr:
with h.td:
h<<u"Cell1" with h.td: h<<u"Cell2" with h.tr: with h.td: h<<h.a("Link1").action(lambda: self.some_func("l1")) with h.td: h<<h.a("Link2").action(self.some_func2)
(Ответить) (Thread)
From: hml
2009-05-17 11:08 am

Re: Stackless и Nagare

упс, форматирование съелось
(Ответить) (Parent) (Thread)
[User Picture]From: eterevsky
2009-05-18 10:19 am
Непонимание юникода меня тоже очень раздражает. Вроде бы, это исправили в Python 3.
(Ответить) (Thread)
From: yuripats
2009-05-19 11:03 am
Питон.
(Ответить) (Thread)