SlideShare a Scribd company logo
PYTHON AST
MODULE
Между исходным текстом и байткодом
Николай Карелин
Что это?
• Abstract Syntax Tree:
• Представление абстрактной структуры кода языка
программирования в виде дерева объектов
• В отличие от дерева разбора (parse tree) остаются только
элементы синтаксиса языка
Компиляция кода
• Python 2.5 и позже
• By Armin Ronacher
.py
Parse
Tree
CFG*
bytecode
AST
*CFG = Control Flow Graph
Пример 1
Module
FunctionDef
Name
Expr Pass
body
arguments
body
Module(
body=[
FunctionDef(name='func', args=arguments(
args=[Name(id='x', ctx=Param())],
vararg=None, kwarg=None,
defaults=[]),
body=[Expr(value=Str(s='My function')),
Pass()],
decorator_list=[])])
Str
value
Param
ctx
Пример 2
https://github.com/titusjan/astviewer
Attributes
Fields
Структура модуля
• from _ast import *
• Часть С-кода
• Определение всех объектов
• Helper functions
• Получение
• Обработка
• Манипуляции
• Visitor/Transformer class prototypes
Иерархия объектов
AST
comprehension
boolop cmpop
arguments excepthandler
alias expr_context
exprmod
operator
keyword
unaryopstmt slice
103 classes in total
Иерархия объектов
• Attribute, BinOp, BoolOp,
• Call, Compare, Dict,
• DictComp, GeneratorExp,
• IfExp, Lambda, List,
• ListComp, Name, Num,
• Repr, Set, SetComp,
• Str, Subscript, Tuple,
• UnaryOp, Yield
• Assert, Assign,
• AugAssign, Break,
• ClassDef, Continue, Delete,
• Exec, Expr, For,
• FunctionDef, Global,
• If, Import, ImportFrom,
• Pass, Print, Raise,
• Return, TryExcept,
• TryFinally, While, With
expr stmt
Синтаксис Python
Синтаксис Python
ASDL (Zephyr Abstract Syntax Definition Language) format
Использует Python скрипт для генерации C-кода ;)
Опционально
0 или более
Примеры
• blaze, cffi, enaml, Ipython
• numpy (SafeEval), pandas, scipy.weave, sympy
• pep8, pip, pycparser pylint pyflakes rope
Применение: компиляция
• Numba, http://numba.pydata.org/
• HOPE, http://hope.phys.ethz.ch
• PyJS (Pyjamas), http://pyjs.org,
https://github.com/pyjs/pyjs
.py
Parse
Tree
CFG
bytecode
AST
LLVM
Visitor
GreenTreeSnakes
Свой язык в Python
• Hy ;)
.py
Parse
Tree
CFG
bytecode
AST
Создание AST
Hy: HyASTCompiler.compile()
Сode instrumenting
• Pyflakes, …
• Macros (http://www.pocoo.org/projects/karnickel/)
.py
Parse
Tree
CFG
bytecode
AST
?
numpy.utils.safe_eval()
…
См. также ast.literal_eval()
Осторожно!
There Might be Dragons!
AST - Предосторожности
• Странные ошибки (segfaults)
• Нет гарантии стабильности API
• Разная структура для
• 2.x <-> 3.x
• Разные версии ветки 3.x
• Cpython, PyPy, Jython, …
Что дальше
• Hacker’s Guide to Python
• PEP 339 / Python Dev. Guide
• Green Tree Snakes documentation,
https://greentreesnakes.readthedocs.org/en/latest/
• ast module documentation
• http://pyvideo.org/video/419/pycon-2011--what-would-you-
do-with-an-ast
• http://www.dalkescientific.com/writings/diary/archive/2010/
02/22/instrumenting_the_ast.html
Hacker’s Guide to Python
Table of contents
1. Starting your project
2. Modules and libraries
3. Documentation
4. Distribution
5. Virtual environments
6. Unit testing
7. Methods and decorators
8. Functional programming
9. The AST
10. Performances and optimizations
11. Scaling and architecture
12. RDBMS and ORM
13. Python 3 support strategies
14. Write less, code more
https://julien.danjou.info/books/the-hacker-guide-to-python
THE END
На будущее
• Sphinx и ReST для документирования проектов
• Python для численных расчетов (Numba, GPU, …)
• ctypesgen – обертки над внешними библиотеками
???
Ищется помощь по белорусификации
http://pymorphy2.readthedocs.org/en/latest/
https://github.com/kmike/pymorphy2

More Related Content

PDF
Введение в потоки питона
PDF
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
PDF
"Внутренности" CPython, часть II
PDF
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
PDF
Беглый обзор "внутренностей" Python
PDF
Ян Габис - RobotFramework: автоматизированое тестирование для всех
PPTX
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
PDF
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Введение в потоки питона
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Внутренности" CPython, часть II
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Беглый обзор "внутренностей" Python
Ян Габис - RobotFramework: автоматизированое тестирование для всех
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)

What's hot (20)

PDF
Мир Python функционалим с помощью библиотек
PDF
Python&Printer / Андрей Пучко / penta.by
PDF
Ecma script 6 in action
PPT
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
PDF
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
PDF
Python и Cython
PDF
Почему Rust стоит вашего внимания
PDF
Сладкое будущее: Phalcon и Zephir
PDF
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
PPTX
Александр Фокин, Рефлексия в C++
PDF
Для чего мы делали свой акторный фреймворк и что из этого вышло?
PDF
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
ODP
About Python
PDF
Борис Сазонов, RAII потоки и CancellationToken в C++
PDF
Магия в Python: Дескрипторы. Что это?
PDF
Something about Golang
PDF
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
PDF
Reform: путь к лучшему ORM
PDF
Павел Довгалюк, Обратная отладка
PDF
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Мир Python функционалим с помощью библиотек
Python&Printer / Андрей Пучко / penta.by
Ecma script 6 in action
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
Python и Cython
Почему Rust стоит вашего внимания
Сладкое будущее: Phalcon и Zephir
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Александр Фокин, Рефлексия в C++
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
About Python
Борис Сазонов, RAII потоки и CancellationToken в C++
Магия в Python: Дескрипторы. Что это?
Something about Golang
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Reform: путь к лучшему ORM
Павел Довгалюк, Обратная отладка
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Ad

Viewers also liked (18)

PDF
Недостатки Python
PDF
Портируем на Python 3
PDF
Vasily Khoruzhik - libusb vs linux kernel — сравнение userspace & kernelspace...
PDF
Социальный игровой сервер на Python: от первого коммита до продакшена
PPTX
Максим Щепелин. "Unittesting. Как?"
PDF
Язык программирования GO
PDF
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
PDF
Очередной скучный доклад про логгирование
PPTX
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
PDF
Про асинхронность / Максим Щепелин / Web Developer Wargaming
PDF
Обзор фреймворка Twisted
PPTX
Обзор способов написания конкурентных программ в питоне
PDF
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
PDF
Redis. Как мы боролись со сложностью
PPTX
Wargaming: тыл - фронту!
PPTX
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
PDF
PPTX
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
Недостатки Python
Портируем на Python 3
Vasily Khoruzhik - libusb vs linux kernel — сравнение userspace & kernelspace...
Социальный игровой сервер на Python: от первого коммита до продакшена
Максим Щепелин. "Unittesting. Как?"
Язык программирования GO
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...
Очередной скучный доклад про логгирование
OpenSource CMS и ERP система в одном флаконе / Олег Курьян / технический дире...
Про асинхронность / Максим Щепелин / Web Developer Wargaming
Обзор фреймворка Twisted
Обзор способов написания конкурентных программ в питоне
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...
Redis. Как мы боролись со сложностью
Wargaming: тыл - фронту!
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15]
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
Ad

More from Python Meetup (8)

PDF
Python для анализа данных
PDF
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
PDF
Использование gevent для эмуляции высокой нагрузки
PDF
Введение в GIL и новый GIL
PDF
Garbage collector and a bit of memory management
PPTX
Неочевидное поведение некоторых конструкций
PDF
Pyton – пробуем функциональный стиль
PDF
Dictionary в Python. По мотивам Objects/dictnotes.txt
Python для анализа данных
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...
Использование gevent для эмуляции высокой нагрузки
Введение в GIL и новый GIL
Garbage collector and a bit of memory management
Неочевидное поведение некоторых конструкций
Pyton – пробуем функциональный стиль
Dictionary в Python. По мотивам Objects/dictnotes.txt

Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]