Animation Nodes provide operators that provides the execution code of the current node tree. You can find that operator under the Developer panel, by pressing the Write button, the execution code of the selected node tree is written to a text block called Execution Code
. For instance, the following node tree:

Have an execution code:
import numpy, sys, bpy
import itertools
from time import perf_counter as getCurrentTime
from mathutils import Vector, Matrix, Quaternion, Euler
AN = animation_nodes = sys.modules.get('animation_nodes')
from animation_nodes.data_structures import *
from animation_nodes import algorithms
nodes = bpy.data.node_groups['NodeTree'].nodes
_y52bwsmno0e080h = nodes['Random Vector']
_csk7p8pg5vv2v5d = nodes['Vector Math']
_8aspl5k05rbhwxn = nodes['Separate Vector']
_seed_y520 = _y52bwsmno0e080h.inputs[0].getValue()
_scale_y521 = _y52bwsmno0e080h.inputs[1].getValue()
# Node: 'NodeTree' - 'Random Vector'
_seed = _seed_y520 + 25642 * _y52bwsmno0e080h.nodeSeed
_randomVector_y522 = algorithms.random.getRandom3DVector(_seed, _scale_y521)
# Node: 'NodeTree' - 'Vector Math'
_result_csk1 = Vector((abs(_randomVector_y522[0]), abs(_randomVector_y522[1]), abs(_randomVector_y522[2])))
# Node: 'NodeTree' - 'Separate Vector'
_x_8as1 = _result_csk1[0]
# Node: 'NodeTree' - 'Viewer'
_38xn88352kup1e3.execute(_x_8as1)
Notice that variables like _seed_y520
and _scale_y521
needs to be substituted with the seed and scale of the Random Vector node respectively.
Another example, a subprograms like this group:

Have an execution code:
import math, numpy, sys, bpy
import itertools
from time import perf_counter as getCurrentTime
from mathutils import Vector, Matrix, Quaternion, Euler
AN = animation_nodes = sys.modules.get('animation_nodes')
from animation_nodes.data_structures import *
from animation_nodes import algorithms
nodes = bpy.data.node_groups['NodeTree'].nodes
_o7ggcrgv1v0zeqz = nodes['Group Input']
_71b912e7wlqq8tj = nodes['Float Math']
_uyl54rvlbgh0b0p = nodes['Group Output']
_b_71b1 = _71b912e7wlqq8tj.inputs[1].getValue()
__socket_False_1_uyl = None
def main(group_input_0):
global _b_71b1
# Node: 'NodeTree' - 'Float Math'
_result_71b2 = group_input_0 + _b_71b1
return _result_71b2
The output code will not work out of the box as you might expect it, it depends on the animation_nodes
module, functions defined by subprograms as well as values defined in the node tree interface.