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