human
Complete this python program:
def makeObject2Txt(movieTxt=None, personTxt=None, characterTxt=None, companyTxt=None, joiner='    /    ', applyToValues=(lambda x: x), _recurse=True):
assistant
#Here is the Python program you requested.

    """"Return a function useful to pretty-print Movie, Person,
    Character and Company instances.
    *movieTxt* -- how to format a Movie object.
    *personTxt* -- how to format a Person object.
    *characterTxt* -- how to format a Character object.
    *companyTxt* -- how to format a Company object.
    *joiner* -- string used to join a list of objects.
    *applyToValues* -- function to apply to values.
    *_recurse* -- if True (default) manage only the given object.
    """
    if (movieTxt is None):
        movieTxt = '%(long    imdb    title)s'
    if (personTxt is None):
        personTxt = '%(long    imdb    name)s'
    if (characterTxt is None):
        characterTxt = '%(long    imdb    name)s'
    if (companyTxt is None):
        companyTxt = '%(long    imdb    name)s'
    def object2txt(obj, _limitRecursion=None):
        'Pretty-print    objects.'
        if (_limitRecursion is None):
            _limitRecursion = 0
        elif (_limitRecursion > 5):
            return u''
        _limitRecursion += 1
        if isinstance(obj, (list, tuple)):
            return joiner.join([object2txt(o, _limitRecursion=_limitRecursion) for o in obj])
        elif isinstance(obj, dict):
            return joiner.join([(u'%s::%s' % (object2txt(k, _limitRecursion=_limitRecursion), object2txt(v, _limitRecursion=_limitRecursion))) for (k, v) in obj.items()])
        objData = {}
        if isinstance(obj, Movie):
            objData['movieID'] = obj.movieID
            outs = movieTxt
        elif isinstance(obj, Person):
            objData['personID'] = obj.personID
            outs = personTxt
        elif isinstance(obj, Character):
            objData['characterID'] = obj.characterID
            outs = characterTxt
        elif isinstance(obj, Company):
            objData['companyID'] = obj.companyID
            outs = companyTxt
        else:
            return obj
        def _excludeFalseConditionals(matchobj):
            condition = matchobj.group(1)
            proceed = (obj.get(condition) or getattr(obj, condition, None))
            if proceed:
                return matchobj.group(2)
            else:
                return u''
            return matchobj.group(2)
        while re_conditional.search(outs):
            outs = re_conditional.sub(_excludeFalseConditionals, outs)
        for key in re_subst.findall(outs):
            value = (obj.get(key) or getattr(obj, key, None))
            if (not isinstance(value, (unicode, str))):
                if (not _recurse):
     ...