<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def search_features( self, feature_set_id=None, parent_id="", reference_name="", start=0, end=0, feature_types=[], name="", gene_symbol=""):
 """ Returns the result of running a search_features method on a request with the passed-in parameters. :param str feature_set_id: ID of the feature Set being searched :param str parent_id: ID (optional) of the parent feature :param str reference_name: name of the reference to search (ex: "chr1") :param int start: search start position on reference :param int end: end position on reference :param feature_types: array of terms to limit search by (ex: "gene") :param str name: only return features with this name :param str gene_symbol: only return features on this gene :return: an iterator over Features as returned in the SearchFeaturesResponse object. """

        request = protocol.SearchFeaturesRequest()
        request.feature_set_id = feature_set_id
        request.parent_id = parent_id
        request.reference_name = reference_name
        request.name = name
        request.gene_symbol = gene_symbol
        request.start = start
        request.end = end
        request.feature_types.extend(feature_types)
        request.page_size = pb.int(self._page_size)
        return self._run_search_request(
            request, "features",
            protocol.SearchFeaturesResponse)