python ast / Николай Карелин / vpi development center [python meetup 27.03.15]

Post on 15-Jul-2015

257 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

valueParam

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

top related