Весело провести время.
Работа через ast
и компиляция дерева в байт-код, как предполагает другой ответ, вероятно, самый простой ; создание исходных текстов и их компиляция почти так же хороши.
Однако, чтобы изучить подходы более низкого уровня, просмотрите ссылки с этой страницы ; Я нашел byteplay особенно полезным (в настоящее время не работает на 2.6 или 3. *, только на 2.4 или 2.5, но я думаю, что исправить это для 2.6 должно быть легко, как это сейчас обсуждается в трекере). Я не использовал Фил Эби '
Проще сгенерировать код Python и запустить его. Если вы сделаете это, вы также сможете легче отлаживать его, так как есть реальный источник для отображения отладчиком. См. Также статью Мальте Борхса в июльском номере журнала Python, где он, среди прочего, говорит об этом.
In Python 2.X, вы обычно подходите к этому с помощью модуля компилятора
и его подмодуля ast
(но обратите внимание, что этот модуль устарел, начиная с версии 2.6). В Python 3.X вы должны использовать только ast
.
Оба предлагают функцию compile ()
, которая перейдет из исходного кода / AST в «объект кода, который может быть выполнен оператором exec
или eval ()
. "
Проверьте модуль дизассемблера, который можно найти здесь:
Фернандо Мейер недавно написал в блоге сообщение , объясняющее, как использовать ] # coding
, чтобы указать ваши собственные расширения для Python. Пример (фактическое определение формата находится в pyspec.py и tokenizer.py ):
# coding: pyspec
class Bow:
def shot(self):
print "got shot"
def score(self):
return 5
describe Bowling:
it "should score 0 for gutter game":
bowling = Bow()
bowling.shot()
assert that bowling.score.should_be(5)