Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 24, 2009 13:09:48

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

В питоне есть with?

Хочется улучшить выражения из таких

result=(object.param1 + object.param2)/object.param3
в такие
with object:
result=(param1 + param2)/param3
Не могу найти. Оно есть или нет?



Офлайн

#2 Сен. 24, 2009 13:18:19

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

В питоне есть with?

Офлайн

#3 Сен. 24, 2009 14:06:01

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

В питоне есть with?

Есть, но для другого. with о котором говорите вы - ужасен.



Офлайн

#4 Сен. 24, 2009 14:10:13

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

В питоне есть with?

ну если только в таком случае…
with module.bla.bla.oiGdeEtoYa.object as o:
result=(o.param1 + o.param2) / o.param3



Офлайн

#5 Сен. 24, 2009 18:06:14

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

В питоне есть with?

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



Офлайн

#6 Сен. 24, 2009 18:27:30

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

В питоне есть with?

OList = [Oi,Oj,Ok]
for o in OList
exec('y=x*z', o.__dict__)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Сен. 24, 2009 18:28:23)

Офлайн

#7 Сен. 24, 2009 19:36:52

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

В питоне есть with?

Знаете, а ведь можно сделать почти именно так, как просит камрад.
Разминка для хвоста:

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

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

То, что сделать такое можно - еще одно доказательство гибкости языка. Другое дело - сам так писать не буду, и другим не советую.
Кстати eval тоже пахнет очень нехорошо.



Отредактировано (Сен. 24, 2009 20:16:09)

Офлайн

#8 Сен. 24, 2009 20:14:07

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

В питоне есть with?

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

..bw



Офлайн

#9 Сен. 24, 2009 20:34:08

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

В питоне есть with?

bw
А автор темы должен перестать чужаться подобных выражений: o.y = o.x * o.z
Ну ведь явно же автор темы пытается отдать логику пользователю для настройки. Альтернативой будет написание DSL.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version