Объекты кода Python - для чего они используются? - PullRequest
4 голосов
/ 21 февраля 2011

Каковы объекты кода Python ? Помимо использования интерпретатором или отладчиком, какие еще полезные применения они имеют?

Вы непосредственно взаимодействовали с объектами кода? Если да, то в какой ситуации?

Ответы [ 3 ]

8 голосов
/ 22 февраля 2011

Основное использование объектов кода - это отделение статических частей функций (кода) от динамических частей (функций).Объекты кода - это вещи, которые хранятся в файлах .pyc и создаются при компиляции кода;функциональные объекты создаются из них во время выполнения, когда функции объявлены.Они доступны для отражения отладчиком, и их не нужно использовать напрямую.

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

Вы можете использовать объекты кода для создания экземпляров объектов функций через types.FunctionType, но это очень редко имеетлюбое практическое использование - другими словами, не делайте этого:

def func(a=1):
    print a

func2 = types.FunctionType(func.func_code, globals(), 'func2', (2,))
func2()
# 2
3 голосов
/ 22 февраля 2011
1 голос
/ 22 февраля 2011

Когда вы используете встроенную функцию компиляции , она возвращает объект кода, например:

>>> c = compile("print 'Hello world'", "string", "exec")
<code object <module> at 0xb732a4e8, file "string", line 1>
>>> exec(c)
Hello world
>>> 

Лично я использовал это в приложениях, которые поддерживают сценарии вразличные плагины: я бы просто прочитал плагин из файла, передал его функции компиляции, а затем использовал exec для запуска его всякий раз, когда это было необходимо, что дает преимущество в увеличении скорости, поскольку вам нужно только скомпилировать егоодин раз для байтового кода.

...