Recalculate Shading Across Multiple Objects <Blender 2.78a>

import bpy
import bmesh

S_o = bpy.context.selected_objects
for Obj in S_o:

    bpy.ops.object.mode_set(mode='OBJECT')

    selected_indices = [v.index for v in Obj.data.vertices if v.select]
    unselected_indices = [v.index for v in Obj.data.vertices if not(v.select)]
    
    bpy.ops.object.mode_set(mode='EDIT')
    bpy.ops.mesh.select_all(action='SELECT')
    bpy.ops.mesh.normals_make_consistent()
    bpy.ops.mesh.select_all(action='DESELECT')    
    bpy.ops.object.mode_set(mode='OBJECT')
    import bpy


    bpy.context.scene.objects.active = Obj

    bpy.ops.object.mode_set(mode='EDIT')

    bm = bmesh.from_edit_mesh(Obj.data)
    for Indice in bm.verts:
        if Indice.index in selected_indices:
            
            Indice.select = True
        elif Indice.index in unselected_indices:
            Indice.select = False    
    bmesh.update_edit_mesh(Obj.data)

I wrote a script that allows you to select multiple objects in blender 2.78a, and recalculate all of the objects shading within that selection while retaining the vertex selections of the selected objects meshes. However this functionality is somewhat bugged and it will only work on one object at a time; in maintaining those internal vertex selections.otherwise everything else works fine, enjoy : )