理解Python中的AST 何翔宇理理解 Python 中的 AST 何翔宇(正⼩小歪) 字节跳动 · 效率⼯工程 · 后端开发⼯工程师 ⽬目录 CONTENTS Intro CPython’s Compiler How to Use AST Library Use AST to Solve Problems Suggestion and Reference Intro CPython’s Compiler Intro to bytecode source code parse tree parse AST CFG transform A transform B bytecode emit source code: ⽂文本形式的 Python 源码 parser tree: 保留留具体语法信息的树 AST: 对语法的⾼高度抽象,不不会保留留细节 CFG: 记录着程序流程的有向图 bytecode: - 使⽤用 Python/ast.c 中的 PyAST_FromNode() 从解析树中读取 - 根据转换规则 Parser/Python.asdl 使⽤用 Python/python-ast.c ⽣生成 AST - PyAST_CompileObject()、PySymtable_BuildObject()、compiler_mod() - 遍历 AST 各个节点创建符号表 -0 码力 | 39 页 | 6.95 MB | 1 年前3
Python 标准库参考指南 3.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1908 32 Python 语言服务 1909 32.1 ast --- 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1909 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1912 32.1.3 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1939 32.1.4 编译器旗标 flags=0, dont_inherit=False, optimize=-1) 将 source 编译成代码或 AST 对象。代码对象可以被exec() 或eval() 执行。source 可以是常规的字 符串、字节字符串,或者 AST 对象。参见ast 模块的文档了解如何使用 AST 对象。 filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值 (经常会使用0 码力 | 2246 页 | 11.74 MB | 9 月前3
Python 标准库参考指南 3.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1904 32 Python 语言服务 1905 32.1 ast --- 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1905 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1908 32.1.3 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1935 32.1.4 编译器旗标 flags=0, dont_inherit=False, optimize=-1) 将 source 编译成代码或 AST 对象。代码对象可以被exec() 或eval() 执行。source 可以是常规的字 符串、字节字符串,或者 AST 对象。参见ast 模块的文档了解如何使用 AST 对象。 filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值 (经常会使用0 码力 | 2242 页 | 11.73 MB | 9 月前3
Python 标准库参考指南 3.12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1876 32 Python 语言服务 1877 32.1 ast --- 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1877 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1880 32.1.3 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1908 32.1.4 编译器旗标 flags=0, dont_inherit=False, optimize=-1) 将 source 编译成代码或 AST 对象。代码对象可以被exec() 或eval() 执行。source 可以是常规的字 符串、字节字符串,或者 AST 对象。参见ast 模块的文档了解如何使用 AST 对象。 filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值 (经常会使用0 码力 | 2253 页 | 11.81 MB | 9 月前3
Python 标准库参考指南 3.12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1876 32 Python 语言服务 1877 32.1 ast --- 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1877 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1880 32.1.3 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1908 32.1.4 编译器旗标 flags=0, dont_inherit=False, optimize=-1) 将 source 编译成代码或 AST 对象。代码对象可以被exec() 或eval() 执行。source 可以是常规的字 符串、字节字符串,或者 AST 对象。参见ast 模块的文档了解如何使用 AST 对象。 filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值 (经常会使用0 码力 | 2253 页 | 11.81 MB | 9 月前3
Python 标准库参考指南 3.10.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1834 32 Python 语言服务 1835 32.1 ast --- 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1835 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1838 32.1.3 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1865 32.1.4 编译器旗标 flags=0, dont_inherit=False, optimize=- 1) 将 source 编译成代码或 AST 对象。代码对象可以被exec() 或eval() 执行。source 可以是常规的字符 串、字节字符串,或者 AST 对象。参见ast 模块的文档了解如何使用 AST 对象。 filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值(经 常会使用0 码力 | 2207 页 | 10.45 MB | 9 月前3
Python 标准库参考指南 3.10.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1718 32 Python 语言服务 1719 32.1 ast --- 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1719 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722 32.1.3 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1747 32.1.4 编译器旗标 flags=0, dont_inherit=False, optimize=- 1) 将 source 编译成代码或 AST 对象。代码对象可以被exec() 或eval() 执行。source 可以是常规的 字符串、字节字符串,或者 AST 对象。参见ast 模块的文档了解如何使用 AST 对象。 filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值 (经常会使用0 码力 | 2072 页 | 10.39 MB | 9 月前3
Python 标准库参考指南 3.11.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1979 32 Python 语言服务 1981 32.1 ast --- 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1981 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1984 32.1.3 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2013 32.1.4 编译器旗标 flags=0, dont_inherit=False, optimize=-1) 将 source 编译成代码或 AST 对象。代码对象可以被exec() 或eval() 执行。source 可以是常规的字符 串、字节字符串,或者 AST 对象。参见ast 模块的文档了解如何使用 AST 对象。 filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值(经 常会使用0 码力 | 2399 页 | 11.19 MB | 9 月前3
Python 标准库参考指南 3.11.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1851 32 Python 语言服务 1853 32.1 ast --- 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1853 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1856 32.1.3 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1883 32.1.4 编译器旗标 flags=0, dont_inherit=False, optimize=-1) 将 source 编译成代码或 AST 对象。代码对象可以被exec() 或eval() 执行。source 可以是常规的 字符串、字节字符串,或者 AST 对象。参见ast 模块的文档了解如何使用 AST 对象。 filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值 (经常会使用0 码力 | 2248 页 | 11.10 MB | 9 月前3
Python 标准库参考指南 3.9.20 6 示例: compile() 的模拟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1785 32.2 ast --- 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1785 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1788 32.2.3 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1809 32.2.4 编译器旗标 flags=0, dont_inherit=False, optimize=-1) 将 source 编译成代码或 AST 对象。代码对象可以被exec() 或eval() 执行。source 可以是常规的字符 串、字节字符串,或者 AST 对象。参见ast 模块的文档了解如何使用 AST 对象。 filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值(经 常会使用0 码力 | 2146 页 | 10.17 MB | 9 月前3
共 85 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9













