<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] <br/><br/><br/> # <b style="color:#4F4F4F;">簡介說明</b> 原文鏈接: - [ast](https://docs.python.org/zh-cn/3.9/library/ast.html#module-ast) ``` 版本:ast 作用:抽象語法樹 ``` <br/> # <b style="color:#4F4F4F;">ast</b> <br/> # <span style="color:#619BE4">*parse()</span> ***** 解析字符串成為model對象,與compile()函數一樣 <br/> ### 返回類型 ``` ast.Module ``` <br/> ### 示例內容 <span style="color:red;">1. 解析成AST對象</span> ``` expr = """ def add(arg1, arg2): return arg1 + arg2 """ expr_ast = ast.parse(expr) ``` <br/> # <span style="color:#619BE4">*unparse()</span> ***** 反解析ast樹對象生成python代碼 <br/> # <span style="color:#619BE4">*dump()</span> ***** 返回ast樹字符串格式 <br/> # <span style="color:#619BE4">*literal_eval()</span> ***** 對表達式節點以及包含Python字面量或容器的字符串進行安全的求值 <br/> # <span style="color:#619BE4">*get_docstring()</span> ***** 返回給定節點的文檔字符 <br/> # <span style="color:#619BE4">*get_source_segment()</span> ***** 獲取生成節點的源代碼的源代碼段 <br/> # <span style="color:#619BE4">*increment_lineno()</span> ***** 從節點開始,將樹中每個節點的行號和結束行號遞增n <br/> # <span style="color:#619BE4">*copy_location()</span> ***** 如果可能,將源位置(lineno,col_offset,end_lineno和end_col_offset)從old_node復制到new_node,然后返回new_node <br/> # <span style="color:#619BE4">*iter_fields()</span> ***** 迭代字段 <br/> # <span style="color:#619BE4">*iter_child_nodes()</span> ***** 迭代子節點 <br/> # <span style="color:#619BE4">*walk()</span> ***** 遍歷節點 <br/> # <span style="color:#619BE4">*fix_missing_locations()</span> ***** 在當前作用域下修復的ast語法樹 <br/> ### 示例內容 <span style="color:red;">1. 舉例說明</span> ``` import ast expr = """ def add(arg1, arg2): return arg1 + arg2 """ expr_ast = ast.parse(expr) class CrazyTransformer(ast.NodeTransformer): def visit_BinOp(self, node): node.op = ast.Mult() return node transformer = CrazyTransformer() ast.fix_missing_locations(transformer.visit(expr_ast)) a = compile(expr_ast, "<string>", mode="exec") exec(a) print(add(8, 2)) ``` <br/> # <span style="color:#619BE4">*[new]-Module()</span> ***** 節點,模塊節點 <br/> # <span style="color:#619BE4">*[new]-Constant()</span> ***** 節點,常量節點 <br/> # <span style="color:#619BE4">*[new]-FormattedValue()</span> ***** 節點,FormattedValue <br/> # <span style="color:#619BE4">*[new]-JoinedStr()</span> ***** 節點,JoinedStr <br/> # <span style="color:#619BE4">*[new]-List()</span> ***** 節點,List <br/> # <span style="color:#619BE4">*[new]-Tuple()</span> ***** 節點,Tuple <br/> # <span style="color:#619BE4">*[new]-Set()</span> ***** 節點,Set <br/> # <span style="color:#619BE4">*[new]-Dict()</span> ***** 節點,Dict <br/> # <b style="color:#4F4F4F;">ast.AST</b> <br/> # <span style="color:#619BE4">[new]-AST()</span> ***** 抽象語法樹基類 <br/> # <span style="color:#619BE4">_fields</span> ***** 所有子節點的名字 <br/> # <span style="color:#619BE4">lineno</span> ***** 行號 <br/> # <span style="color:#619BE4">end_lineno</span> ***** 結束行號 <br/> # <span style="color:#619BE4">col_offset</span> ***** 列偏移 <br/> # <span style="color:#619BE4">end_col_offset</span> ***** 列偏移結束位置 <br/> # <b style="color:#4F4F4F;">ast.NodeVisitor</b> <br/> # <span style="color:#619BE4">[new]-NodeVisitor()</span> ***** 抽象語法樹遍歷類 <br/> # <span style="color:#619BE4">visit()</span> ***** 訪問一個節點 <br/> # <span style="color:#619BE4">generic_visit()</span> ***** 此訪問者在節點的所有子節點上調用 visit() <br/> # <b style="color:#4F4F4F;">ast.NodeTransformer</b> <br/> # <span style="color:#619BE4">[ext]-NodeVisitor()</span> ***** 抽象語法樹遍歷類 <br/> # <span style="color:#619BE4">[new]-NodeTransformer()</span> ***** 子類 NodeVisitor 用于遍歷抽象語法樹,并允許修改節點 <br/> ### 示例內容 <span style="color:red;">1. 舉例說明</span> ``` import ast expr = """ def add(arg1, arg2): return arg1 + arg2 """ expr_ast = ast.parse(expr) class CrazyTransformer(ast.NodeTransformer): def visit_BinOp(self, node): node.op = ast.Mult() return node transformer = CrazyTransformer() modified = transformer.visit(expr_ast) pro = compile(modified, '<string>', 'exec') exec(pro) print(add(8,2)) ``` <span style="color:red;">2. 舉例說明</span> ``` import ast class CodeTransformer(ast.NodeTransformer): def visit_BinOp(self, node): if isinstance(node.op, ast.Add): node.op = ast.Sub() self.generic_visit(node) return node def visit_FunctionDef(self, node): self.generic_visit(node) # 這里表示先去訪問里面的children node if node.name == 'add': node.name = 'sub' args_num = len(node.args.args) args_num = len(node.args.args) args = tuple([arg.arg for arg in node.args.args]) print(str(args)) func_log_stmt = ''.join(["print('calling func: %s', " % node.name, "'args:'", ", %s" * args_num % args, ')']) node.body.insert(0, ast.parse(func_log_stmt)) # func_log_stmt = ''.join(["print 'calling func: %s', " % node.name, "'args:'", ", %s" * args_num % args]) # node.body.insert(0, ast.parse(func_log_stmt)) return node def visit_Name(self, node): replace = {'add': 'sub', 'x': 'a', 'y': 'b'} re_id = replace.get(node.id, None) node.id = re_id or node.id self.generic_visit(node) return node def visit_arg(self, node): self.generic_visit(node) replace = {'x': 'a', 'y': 'b'} node.arg = replace[node.arg] return node func_def = \ """ def add(x, y): return x+y """ r_node = ast.parse(func_def) transformer = CodeTransformer() r_node = transformer.visit(r_node) source = ast.unparse(r_node) print(source) ``` <br/>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看