avva: (Default)
[personal profile] avva
Я наконец начал писать на Пайтоне. Но, по-моему, пишу в нем пока что в стиле Перла.

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

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

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

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

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

Date: 2009-05-16 10:30 pm (UTC)
From: [identity profile] amarao-san.livejournal.com
Самое интересное там начинается в районе функционального программирования. Итератор, возвращающий функции - это же круто!

Date: 2009-05-16 10:51 pm (UTC)
From: [identity profile] ob3r0n.livejournal.com
а замыкания и декораторы - вообще верх совершенства )

Date: 2009-05-16 10:58 pm (UTC)
From: [identity profile] amarao-san.livejournal.com
замыкания в питоне? Они есть?

(И что есть декораторы?)

Date: 2009-05-16 11:01 pm (UTC)
From: [identity profile] ob3r0n.livejournal.com
а куда ж без них ? ;)

собственно вот:

http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D0%9F%D0%B8%D1%82%D0%BE%D0%BD%D0%B5#.D0.97.D0.B0.D0.BC.D1.8B.D0.BA.D0.B0.D0.BD.D0.B8.D1.8F



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

Применяются декораторы так:

@decor
def f(x,y):
...

и это эквивалентно такой записи:

def f(x,y):
...
f = decor(f)

взято: http://iportnov.blogspot.com/2008/03/python-iii.html

по сути это синтаксический сахар и это все можно сделать ручками. но госоди, как же это удобно ;)))

вот пример:

def trace(func):
name = func.func_name                                                   # имя переданной функции
def wrapper(*args,**kwargs):                                          # создаем новую функцию
 print "Function called: %s(%s,%s)" % (name,args,kwargs)
 result = func(*args,**kwargs)                                        # вызываем исходную функцию
 print "Function %s returned %s" % (name,result)
 return result
return wrapper                                                                 # возвращаем созданную функцию

@trace
def f(x,y):
 return x*y+2

Date: 2009-05-17 06:57 am (UTC)
From: [identity profile] drmor.livejournal.com
Прошу прощения за дупы.

В питоне есть некое подобие замыканий, в котором связанные переменные -- read-only:

>>> def make_counter():
...     x = 0
...     def get():
...             return x
...     def increase():
...             x = x + 1
...             return get()
...     return [get, increase]
...
>>> make_counter()
[<function get at 0x0272C9C0>, <function increase at 0x0272C618>]
>>> counter = make_counter()
>>> counter[0]()
0
>>> counter[1]()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in increase
UnboundLocalError: local variable 'x' referenced before assignment


Писабельные переменные эмулируются следующим образом:

>>> def make_counter():
...     x = [0]
...     def get():
...             return x[0]
...     def increase():
...             x[0] += 1
...             return get()
...     return [get, increase]
...
>>> counter = make_counter()
>>> counter
[<function get at 0x02698D68>, <function increase at 0x02698CD8>]
>>> counter[0]()
0
>>> counter[1]()
1
>>> counter[1]()
2
>>> counter[1]()
3
>>> counter[1]()
4
>>> counter[1]()
5
>>>

Date: 2009-05-16 10:59 pm (UTC)
From: [identity profile] nec-p1us-u1tra.livejournal.com
Замыкания прекрасно есть в перле.

Date: 2009-05-16 11:05 pm (UTC)
From: [identity profile] ob3r0n.livejournal.com
а итераторы в си++ и что с того?

Date: 2009-05-16 11:10 pm (UTC)
From: [identity profile] nec-p1us-u1tra.livejournal.com
Ну так какое это преимущество тогда?

Date: 2009-05-16 11:22 pm (UTC)
From: [identity profile] ob3r0n.livejournal.com
вестимо в реализации и используемости. а также доопределение и обобщение.

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

Date: 2009-05-16 11:44 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Кстати, не забудем и про метаклассы, позволяющие, например, с лёгкостью писать ORM-классы просто в виде набора полей :)
(В 3.0 наконец сделали и метакласс через декоратор.)

Date: 2009-05-17 09:02 am (UTC)
From: [identity profile] meanab.livejournal.com
Верх? Ого!
Кстати, всегда после какого-нибудь сообщения об использовании питона хочется спросить: «ну и как, is it an acceptable lisp?» ;)

Date: 2009-05-17 08:55 am (UTC)
From: [identity profile] migmit.vox.com (from livejournal.com)
А там есть функциональное программирование??? Он же даже хвостовую рекурсию, вроде, до сих пор не умеет.

Date: 2009-05-18 10:14 am (UTC)
From: [identity profile] eterevsky.livejournal.com
Между прочим, Гвидо пишет, что когда он придумывал питон, он не знал функциональных языков, и не затачивал ничего под них. Было бы круто, если бы питон был чуть более influenced by функциональные языки.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 07:19 am
Powered by Dreamwidth Studios