axe
Янв. 26, 2010 13:36:44
Есть некоторые сущности, с которыми должны быть связаны функции проверки. Функции должны быть написаны на Python (т.к. будут запускаться в Python), содержимое функций должно храниться в базе, вместе с соответствующими сущностями.
Мне надо придумать способ, как эти функции хранить, создавать и отлаживать.
eval при попытке создания функции через def ругается.
regall
Янв. 26, 2010 13:56:24
Первая мысль - сделать классы-проверщики и хранить их с помощью pickle.
P.S.
Для этого можно также посмотреть в коде фреймворка Zope2, там где-то используется хранение участков кода для последующего выполнения.
P.P.S.
А eval ругается потому что он не умеет, и нужно использовать exec. Хотя я, к примеру, такие аццкие хаки не люблю…
Андрей Светлов
Янв. 26, 2010 14:19:58
PEP 302. Хранить - хоть в текстовом питоновском виде. Организовав кеш получившихся codeobject для скорости, если нужно (как питон делает с .py -> .pyc)
Отлаживать - еще проще. На время отладки подставлять файлы на диске, а в production эту дыру отключать.
ZZZ
Янв. 26, 2010 14:30:13
Был тут один…
Зачёса…
Пишет “симулятор всего”, пытаясь запихать весь игромех (вместе логикой, конечно) в реляцию.
Смотреть тут:
http://www.elite-games.ru/conference/viewtopic.php?t=43530P.S. Только мозг от этого “креатива” не сломайте.
regall
Янв. 26, 2010 14:45:57
А, это тот который на нашем форуме агитировал с ним делать вселенную будущего? =)) ыыы
ZZZ
Янв. 26, 2010 15:06:49
Ага… Редкий человек… Гений! Никто не понимает, того, что он хочет сделать! Даже Он сам. :-D
axe
Янв. 26, 2010 15:22:23
Андрей, я пробую читать по инету про PEP302, но пока не могу разобраться. Есть и ограничения в знании английского, и до Вашего уровня в python мне очень далеко. Если можно, ответьте чуть более подробно?
Видимо, надо копать в сторону модуля imp?
ZZZ, по ссылке посмотрел первые три страницы. По-моему, к теме не очень относится. Просмотреть все 58 страниц обсуждения не могу, т.к. ограничение трафика на рабочем месте. Может быть вечером взгляну.
bw
Янв. 26, 2010 15:39:19
> eval при попытке создания функции через def ругается.
> и нужно использовать exec
__builtins__.compile(…) ?
Можно хранить (и при необходимости выполнять) и байт-код, но нужно следить за версией Python (в какой был этот код создан и в какой сейчас будет интерпретироваться). Я так поступал в детстве.
p.s. Хотя я не понял что требуется, наугад сказал :-).
..bw
axe
Янв. 26, 2010 16:36:39
получается следующее:
BODY = """
class m(object):
z = []
def __init__(self):
pass
def hello():
print "hello"
"""
exec(compile(BODY, "<string>", "exec"))
hello()
print dir(m())
axe
Янв. 26, 2010 16:48:55
видимо и без compile всё работает:
exec("""
def hello():
print "hello"
""")
hello()