def visit_function_obj(v, ids_seen_set): v_id = id(v) # to prevent infinite loop if v_id in ids_seen_set: yield None else: ids_seen_set.add(v_id) typ = type(v) # simple base case if typ in (types.FunctionType, types.MethodType): yield v # recursive cases elif typ in (list, tuple, set): for child in v: for child_res in visit_function_obj(child, ids_seen_set): yield child_res elif typ == dict or pg_encoder.is_class(v) or pg_encoder.is_instance( v): contents_dict = None if typ == dict: contents_dict = v # warning: some classes or instances don't have __dict__ attributes elif hasattr(v, '__dict__'): contents_dict = v.__dict__ if contents_dict: for (key_child, val_child) in contents_dict.items(): for key_child_res in visit_function_obj( key_child, ids_seen_set): yield key_child_res for val_child_res in visit_function_obj( val_child, ids_seen_set): yield val_child_res # degenerate base case yield None
def visit_function_obj(v, ids_seen_set): v_id = id(v) print v print ids_seen_set # to prevent infinite loop if v_id in ids_seen_set: yield None else: ids_seen_set.add(v_id) typ = type(v) # simple base case if typ in (types.FunctionType, types.MethodType): yield v # recursive cases elif typ in (list, tuple, set): for child in v: for child_res in visit_function_obj(child, ids_seen_set): yield child_res elif typ == dict or pg_encoder.is_class(v) or pg_encoder.is_instance(v): contents_dict = None if typ == dict: contents_dict = v # warning: some classes or instances don't have __dict__ attributes elif hasattr(v, '__dict__'): contents_dict = v.__dict__ if contents_dict: for (key_child, val_child) in contents_dict.items(): for key_child_res in visit_function_obj(key_child, ids_seen_set): yield key_child_res for val_child_res in visit_function_obj(val_child, ids_seen_set): yield val_child_res # degenerate base case yield None