программистское, python
May. 17th, 2009 12:21 amЯ наконец начал писать на Пайтоне. Но, по-моему, пишу в нем пока что в стиле Перла.
Из того, что не нравится:
- это ненормально, когда в языке есть встроенная функция open(), а встроенной функции close() нету. Есть в этом что-то извращенное.
- основной аргумент поклонников Пайтона - что в нем все продумано, логично, и на все есть один логичный способ это сделать, в отличие от Перла, где все можно сделать сотней разных способов. Но при приближении к объекту начинают бросаться в глаза трещины и морщины. Меня поразило количество встроенных в язык путей интерполировать значение внутри строки: 1) синтаксис %s и оператор % 2) синтаксис {0} и метод str.format() 3) синтаксис $x и класс string.Template. При этом все три способа оказались недостаточно мощными для моих достаточно скромных целей.
- какая-то фигня с Юникодом происходит. print не умеет выводить ничего, кроме байтов; нет способа объяснить ему, что юникодные строки надо выводить всегда в такой-то кодировке. Поэтому печать utf-8 строк либо включает в себя кучу вызовов decode() практически на каждую строку, либо пользуется менее удобными функциями, чем print.
В целом язык приятный. К significant whitespace привыкаешь очень быстро, и к {} обратно не тянет. Вообще синтаксис очень легкий, простой и интуитивный в большинстве случаев. Посмотрим, что он еще расскажет.
Из того, что не нравится:
- это ненормально, когда в языке есть встроенная функция open(), а встроенной функции close() нету. Есть в этом что-то извращенное.
- основной аргумент поклонников Пайтона - что в нем все продумано, логично, и на все есть один логичный способ это сделать, в отличие от Перла, где все можно сделать сотней разных способов. Но при приближении к объекту начинают бросаться в глаза трещины и морщины. Меня поразило количество встроенных в язык путей интерполировать значение внутри строки: 1) синтаксис %s и оператор % 2) синтаксис {0} и метод str.format() 3) синтаксис $x и класс string.Template. При этом все три способа оказались недостаточно мощными для моих достаточно скромных целей.
- какая-то фигня с Юникодом происходит. print не умеет выводить ничего, кроме байтов; нет способа объяснить ему, что юникодные строки надо выводить всегда в такой-то кодировке. Поэтому печать utf-8 строк либо включает в себя кучу вызовов decode() практически на каждую строку, либо пользуется менее удобными функциями, чем print.
В целом язык приятный. К significant whitespace привыкаешь очень быстро, и к {} обратно не тянет. Вообще синтаксис очень легкий, простой и интуитивный в большинстве случаев. Посмотрим, что он еще расскажет.
no subject
Date: 2009-05-16 09:59 pm (UTC)Портировать этот зоопарк, например, на солярис - это сплошные танцы с бубнами.
в общем, если есть возможность не использовать пайтон, то я и не использую :)
no subject
Date: 2009-05-16 10:48 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-05-17 08:38 am (UTC)в этом отношении сосут практически все языки и библиотеки!
включая, кстати, и Солярис!
(no subject)
From:no subject
Date: 2009-05-16 10:02 pm (UTC)no subject
Date: 2009-05-16 10:49 pm (UTC)no subject
Date: 2009-05-17 09:29 am (UTC)А self всего лишь соглашение о именовании, также как для классметодов принято писать cls.
no subject
Date: 2009-05-17 02:57 pm (UTC)а меня после питона стало раздражать { }
no subject
Date: 2009-05-16 10:03 pm (UTC)f.write('eggs\n')
f.close()
Вполне себе есть.
open (он же file) правильнее рассматривать как конструктор, а не как функцию.
PS Кстати %s может быть и %(key)s -- тогда правый аргумент % трактуется как dict
no subject
Date: 2009-05-16 10:09 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2009-05-16 10:11 pm (UTC)#!/usr/bin/env python2.5
# -*- coding: utf-8 -*-
?
no subject
Date: 2009-05-16 10:15 pm (UTC)a = u"не работает"
print a
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-4: ordinal not in range(256)
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-05-16 10:50 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-05-16 10:30 pm (UTC)no subject
Date: 2009-05-16 10:51 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-05-17 08:55 am (UTC)(no subject)
From:no subject
Date: 2009-05-16 10:48 pm (UTC)суть как раз в том, что интуитивно понятен должен быть один способ, а сделать можно множеством способов.
print как раз адекватно работает.
другое дело, что люди не отличают unicode и utf8
надо просто уметь общаться с encode() decode() и люди к вам потянутся.
это как раз культуру прививает ;)
кстати в python3000 вроде изначально все в юникоде и это кажется еще лучше.
no subject
Date: 2009-05-16 10:57 pm (UTC)Но в Хаскеле ещё лучше :)
no subject
Date: 2009-05-16 11:46 pm (UTC)Питон всё же разрабатывался изначально как язык для обучения. (И до сих пор отлично подходит.)
(no subject)
From:no subject
Date: 2009-05-16 11:02 pm (UTC)no subject
Date: 2009-05-16 11:51 pm (UTC)>>> def foo(p, x={}): ... x[p]="used up" ... return x ... >>> foo(1) {1: 'used up'} >>> foo(2) {1: 'used up', 2: 'used up'} >>> _Не программисткое
Date: 2009-05-17 05:12 am (UTC)Когда подумаешь о всем нашем мире, то наверное такое и неплохо.
no subject
Date: 2009-05-17 07:21 am (UTC)1. локаль стоит?
2. случайно ли не ipython -- у него есть некоторые проблемы с юникодом.
Вообще, язык очень приятный. Как многие замечали, в чем-то похож на lisp.
И что хорошо -- есть куча различных библиотек + высокие возможности интеграции с C и C++ -- тот же boost.python.
no subject
Date: 2009-05-17 08:36 am (UTC)no subject
Date: 2009-05-18 10:18 am (UTC)no subject
Date: 2009-05-17 08:39 am (UTC)А так язык приятный, да. Пишу меньше года, но этого уже достаточно, чтобы его почувствовать.
Кстати, встроенный close и не нужен. Достаточно удалить объект.
no subject
Date: 2009-05-18 09:33 am (UTC)А почему в будущем времени? python 3 давно уже вышел, готовится к выпуску 3.1…
(no subject)
From:Stackless и Nagare
Date: 2009-05-17 11:07 am (UTC)А как там можно генерировать 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)
Re: Stackless и Nagare
Date: 2009-05-17 11:08 am (UTC)no subject
Date: 2009-05-18 10:19 am (UTC)no subject
Date: 2009-05-19 11:03 am (UTC)