When I subdivide a face, how do I get each face from the result in Python?
Bmesh approach

Using the bmesh operator bmesh.ops.subdivide_edges(..) with cuts = 1 and use_grid_fill = True will produce the result of subdividing a quad face into four.

Test script, run in edit mode, subdivides face 0, prints the four newly added faces.

import bpy
import bmesh
context = bpy.context
ob = context.edit_object
me = ob.data

bm = bmesh.from_edit_mesh(me)

face = bm.faces[0]
ret = bmesh.ops.subdivide_edges(bm, edges=face.edges[:], cuts=1)
for f in ret['geom']:
    # new geometry
    if isinstance(f, bmesh.types.BMFace):
        print(f)