Команданте ибн Кандела ([info]dervish_candela) wrote,
@ 2009-09-09 10:31:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Entry tags:orz, питонство, программирование

элеватор? эскалатор?
Интересно, насколько недырява абстракция генераторов? Приемлемо ли использовать генераторы в 2.5 как процедуры с сохранением состояния в общем случае - допустим, может ли метод гуевого класса использовать yield?




(7 comments) - (Post a new comment)


[info]amarao_san
2009-09-09 06:45 am UTC (link)
А почему нет? Оно же крякает как утка?

(Reply to this) (Thread)


[info]dervish_candela
2009-09-09 08:24 am UTC (link)
да вот то-то и оно, что не пойму, крякает или нет.

похоже, в случае с методами проще не выпендриваться и юзать классический подход - хранить и изменять состояние в self, чем заставить саму процедуру сохранять состояние.

(Reply to this) (Parent)(Thread)


[info]amarao_san
2009-09-09 01:24 pm UTC (link)
Можно пример кода, в котором не понятно крякает оно или нет?

(Reply to this) (Parent)(Thread)


[info]dervish_candela
2009-09-09 06:08 pm UTC (link)
проверил, всё крякает и ныряет.

(Reply to this) (Parent)


[info]dervish_candela
2009-09-09 09:23 am UTC (link)
мне нравились бейсиковские static sub - у них была одна точка входа и сохранение состояния локальных переменных. у генератора же точки входа (как минимум) две, соответственно если мы хотим что-то новое передать генератору, то должны писать хз какой бойлерплейт для повторного вызова (либо я пока не наткнулся на нужную идиому, чтоб заставить это работать)

(Reply to this) (Parent)(Thread)


[info]amarao_san
2009-09-09 05:47 pm UTC (link)
тебе нужно иметь локальные переменные (статические) и режим генератора, т.е. вызов next? Я может глючу, но в питоне были какие-то интересные методы для сохранения локальных статических переменных (сохраняющих значения между вызовами).

Генераторы не для этого предназначены.

(Reply to this) (Parent)(Thread)


[info]dervish_candela
2009-09-09 05:56 pm UTC (link)
да я уже разобрался, не успел написать ответ. стал немножко лучше понимать механизм их работы (в частности, например, что функция, описывающая генератор - не есть сам генератор, и разницу между next и send), хотя например идею использования их для асинхр. IO я до сих пор не впиливаю.

действительно, генераторы предназначены совершенно не для этого.

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

(Reply to this) (Parent)


(7 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…