Найти - Пользователи
Полная версия: В питоне есть with?
Начало » Python для новичков » В питоне есть with?
1
Nick2009
Хочется улучшить выражения из таких
result=(object.param1 + object.param2)/object.param3
в такие
with object:
result=(param1 + param2)/param3
Не могу найти. Оно есть или нет?
Ferroman
В гугле забанили?
Александр Кошелев
Есть, но для другого. with о котором говорите вы - ужасен.
pasaranax
ну если только в таком случае…
with module.bla.bla.oiGdeEtoYa.object as o:
result=(o.param1 + o.param2) / o.param3
Nick2009
Daevaorn
Есть, но для другого. with о котором говорите вы - ужасен.
В каком смысле ужасен, тормоз?

Нужно следующее.

Дана формула в синтаксисе питона “y=x+z”
где y,x,z имена членов некоторого класса O
OList = [Oi,Oj,Ok]
for o in OList
with o
eval("y=x+z") #полезно
#или
y=eval("x+z") #менее полезно
#или
y=x+z #почти бесполезно
результат должен быть сохранен в o.y
PooH
OList = [Oi,Oj,Ok]
for o in OList
exec('y=x*z', o.__dict__)
Андрей Светлов
Знаете, а ведь можно сделать почти именно так, как просит камрад.
Разминка для хвоста:

OList =
for o in OList
with Context(o):
# do staff

Класс Context должен на __enter__ сохранить locals(), добавить в них полный? список атрибутов своего опекаемого объекта.
Дать возможность выполнится - и на __exit__ вернуть locals обратно, при этом все изменения зафиксировать в объекте если не было исключения.

То, что сделать такое можно - еще одно доказательство гибкости языка. Другое дело - сам так писать не буду, и другим не советую.
Кстати eval тоже пахнет очень нехорошо.
bw
> Кстати eval тоже пахнет очень нехорошо.
Поддерживаю.
А автор темы должен перестать чужаться подобных выражений: o.y = o.x * o.z
Где-то их можно и нужно избегать, но не на Python, это привилегированный язык, остальные языки его боятся и уважают :-).

..bw
PooH
bw
А автор темы должен перестать чужаться подобных выражений: o.y = o.x * o.z
Ну ведь явно же автор темы пытается отдать логику пользователю для настройки. Альтернативой будет написание DSL.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB