<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def synset(synset_key):
 """Returns synset object with the provided key. Notes ----- Uses lazy initialization - synsets will be fetched from a dictionary after the first request. Parameters synset_key : string Unique synset identifier in the form of `lemma.pos.sense_no`. Returns ------- Synset Synset with key `synset_key`. None, if no match was found. """


    if synset_key in SYNSETS_DICT:
        return SYNSETS_DICT[synset_key]

    def _get_synset_idx(synset_key):
        """Returns synset index for the provided key.

        Note
        ----
          Internal function. Do not call directly.

        """
        with codecs.open(_SENSE_FILE,'rb', 'utf-8') as fin:
            for line in fin:
                split_line = line.split(':')
                if split_line[0] == synset_key:
                    return int(split_line[1].strip())
        return None

    synset_idx = _get_synset_idx(synset_key)

    if synset_idx == None:
        return None

    synset_offset = _get_synset_offsets([synset_idx])
    synset = _get_synsets(synset_offset)

    return synset[0]