Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2009 11:54:56

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

DSL

Наткнулся на ActiveState, очень понравилось:

from __future__ import with_statement
from contextlib import contextmanager

class Table(object):
def __init__(self, table_name):
self.table_name = table_name
self.fields = {}

def __setattr__(self, attr, value):
if attr in ("fields", "table_name"):
object.__setattr__(self, attr, value)
else:
self.fields[attr] = value

def execute(self):
print "Creating table %s with fields: %s" % (self.table_name, self.fields)

@contextmanager
def create_table(table_name):
table=Table(table_name)
yield table
table.execute()

#try it!
with create_table("Employee") as t:
t.first_name = {"type" : "char", "length" : 30 }
t.last_name = {"type" : "char", "length" : 30 }
t.age = {"type" : "int"}

#prints:
#Creating table Employee with fields: {'first_name': {'length':
#30, 'type': 'char'}, 'last_name': {'length': 30, 'type': 'char'}, 'age':
#{'type': 'int'}}



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

Отредактировано (Ноя. 6, 2009 11:55:46)

Офлайн

#2 Ноя. 6, 2009 12:23:51

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

DSL

http://blog.brianbeck.com/post/53538107/python-dsl-i доклад ещё был неплохой по теме

Офлайн

#3 Ноя. 6, 2009 12:24:53

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

DSL

PooH
Наткнулся на ActiveState, очень понравилось:
А в чем фишка?



Отредактировано (Ноя. 6, 2009 18:27:24)

Офлайн

#4 Ноя. 6, 2009 18:13:40

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

DSL

^^^ комент не мой В)

наверно в применение contextmanager'a для данной задачи)

Офлайн

#5 Ноя. 6, 2009 18:37:12

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

DSL

slav0nic
наверно в применение contextmanager'a для данной задачи)
Именно. Правда спустя некоторое время мой восторг поутих. Особых преимуществ в выразительности подход таки не дает.



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

Офлайн

#6 Ноя. 6, 2009 19:08:07

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

DSL

PooH
Именно. Правда спустя некоторое время мой восторг поутих. Особых преимуществ в выразительности подход таки не дает.
В данном случае context manager вообще ничего не дает.
Тоже самое можно и так написать:
t = create_table("Employee")
t.first_name = {"type" : "char", "length" : 30 }
t.last_name = {"type" : "char", "length" : 30 }
t.age = {"type" : "int"}
фишка в лишнем инденте?:-)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version