<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def fullConn (self, preCellsTags, postCellsTags, connParam):
    from .. import sim

    ''' Generates connections between all pre and post-syn cells '''
    if sim.cfg.verbose: print('Generating set of all-to-all connections (rule: %s) ...' % (connParam['label']))

    # get list of params that have a lambda function
    paramsStrFunc = [param for param in [p+'Func' for p in self.connStringFuncParams] if param in connParam] 

    for paramStrFunc in paramsStrFunc:
        # replace lambda function (with args as dict of lambda funcs) with list of values
        connParam[paramStrFunc[:-4]+'List'] = {(preGid,postGid): connParam[paramStrFunc](**{k:v if isinstance(v, Number) else v(preCellTags,postCellTags) for k,v in connParam[paramStrFunc+'Vars'].items()})  
            for preGid,preCellTags in preCellsTags.items() for postGid,postCellTags in postCellsTags.items()}
    
    for postCellGid in postCellsTags:  # for each postsyn cell
        if postCellGid in self.gid2lid:  # check if postsyn is in this node's list of gids
            for preCellGid, preCellTags in preCellsTags.items():  # for each presyn cell
                self._addCellConn(connParam, preCellGid, postCellGid)