Там какой-либо путь состоит в том, чтобы программно генерировать байт-код Python?

Весело провести время.

  1. Должен повредить контролируемые исключительные ситуации.
  2. Должен найти способ реализовать делегатов (которые похожи на интерфейсы отдельного метода, добавил не ранее, чем время загрузки).
11
задан Shimmy 9 August 2010 в 07:31
поделиться

5 ответов

Работа через ast и компиляция дерева в байт-код, как предполагает другой ответ, вероятно, самый простой ; создание исходных текстов и их компиляция почти так же хороши.

Однако, чтобы изучить подходы более низкого уровня, просмотрите ссылки с этой страницы ; Я нашел byteplay особенно полезным (в настоящее время не работает на 2.6 или 3. *, только на 2.4 или 2.5, но я думаю, что исправить это для 2.6 должно быть легко, как это сейчас обсуждается в трекере). Я не использовал Фил Эби '

11
ответ дан 3 December 2019 в 05:58
поделиться

Проще сгенерировать код Python и запустить его. Если вы сделаете это, вы также сможете легче отлаживать его, так как есть реальный источник для отображения отладчиком. См. Также статью Мальте Борхса в июльском номере журнала Python, где он, среди прочего, говорит об этом.

2
ответ дан 3 December 2019 в 05:58
поделиться

In Python 2.X, вы обычно подходите к этому с помощью модуля компилятора и его подмодуля ast (но обратите внимание, что этот модуль устарел, начиная с версии 2.6). В Python 3.X вы должны использовать только ast .

Оба предлагают функцию compile () , которая перейдет из исходного кода / AST в «объект кода, который может быть выполнен оператором exec или eval () . "

5
ответ дан 3 December 2019 в 05:58
поделиться

Проверьте модуль дизассемблера, который можно найти здесь:

http://docs.python.org/library/dis.html

0
ответ дан 3 December 2019 в 05:58
поделиться

Фернандо Мейер недавно написал в блоге сообщение , объясняющее, как использовать ] # 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)
1
ответ дан 3 December 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: