CodyKochmann
12/27/2017 - 1:56 PM

this demonstrates how to make custom python ast logic without analyzing strings

this demonstrates how to make custom python ast logic without analyzing strings

In [196]: # by: Cody Kochmann - this demonstrates how to make ast logic without analyzing strings

In [197]: def my_adder(a,b,c):
     ...:     d = a+b
     ...:     if c%2:
     ...:         return a+b
     ...:     else:
     ...:         return a+d
     ...:

In [198]: ast.parse(inspect.getsource(my_adder)).body[0].body[0]
Out[198]: <_ast.Assign at 0x108d95ac8>

In [199]: ast.dump(ast.parse(inspect.getsource(my_adder)).body[0].body[0])
Out[199]: "Assign(targets=[Name(id='d', ctx=Store())], value=BinOp(left=Name(id='a', ctx=Load()), op=Add(), right=Name(id='b', ctx=Load())))"

In [200]: ast.Assign(targets=[ast.Name(id='d', ctx=ast.Store())], value=ast.BinOp(left=ast.Name(id='a', ctx=ast.Load()), right=ast.Name(id='b', ctx=ast.Load())))
Out[200]: <_ast.Assign at 0x108dca9e8>

In [201]: ast.dump(ast.Assign(targets=[ast.Name(id='d', ctx=ast.Store())], value=ast.BinOp(left=ast.Name(id='a', ctx=ast.Load()), right=ast.Name(id='b', ctx=ast.Load()))))
Out[201]: "Assign(targets=[Name(id='d', ctx=Store())], value=BinOp(left=Name(id='a', ctx=Load()), right=Name(id='b', ctx=Load())))"