Форум сайта python.su
Хочется улучшить выражения из таких
result=(object.param1 + object.param2)/object.param3
with object:
result=(param1 + param2)/param3
Офлайн
Офлайн
Есть, но для другого. with о котором говорите вы - ужасен.
Офлайн
ну если только в таком случае…
with module.bla.bla.oiGdeEtoYa.object as o:
result=(o.param1 + o.param2) / o.param3
Офлайн
DaevaornВ каком смысле ужасен, тормоз?
Есть, но для другого. with о котором говорите вы - ужасен.
OList = [Oi,Oj,Ok]
for o in OList
with o
eval("y=x+z") #полезно
#или
y=eval("x+z") #менее полезно
#или
y=x+z #почти бесполезно
Офлайн
OList = [Oi,Oj,Ok]
for o in OList
exec('y=x*z', o.__dict__)
Отредактировано (Сен. 24, 2009 18:28:23)
Офлайн
Знаете, а ведь можно сделать почти именно так, как просит камрад.
Разминка для хвоста:
OList =
for o in OList
with Context(o):
# do staff
Класс Context должен на __enter__ сохранить locals(), добавить в них полный? список атрибутов своего опекаемого объекта.
Дать возможность выполнится - и на __exit__ вернуть locals обратно, при этом все изменения зафиксировать в объекте если не было исключения.
То, что сделать такое можно - еще одно доказательство гибкости языка. Другое дело - сам так писать не буду, и другим не советую.
Кстати eval тоже пахнет очень нехорошо.
Отредактировано (Сен. 24, 2009 20:16:09)
Офлайн
> Кстати eval тоже пахнет очень нехорошо.
Поддерживаю.
А автор темы должен перестать чужаться подобных выражений: o.y = o.x * o.z
Где-то их можно и нужно избегать, но не на Python, это привилегированный язык, остальные языки его боятся и уважают :-).
..bw
Офлайн
bwНу ведь явно же автор темы пытается отдать логику пользователю для настройки. Альтернативой будет написание DSL.
А автор темы должен перестать чужаться подобных выражений: o.y = o.x * o.z
Офлайн