Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
339 views
in Technique[技术] by (71.8m points)

return value of recursive function python

I have a problem with this recursive function:

def query(params,conta):        
    req = api.APIRequest(site, params)
    res = req.query(querycontinue=False)
    pprint.pprint(res)  
    conta=conta+str(res).count('title') 
    print conta

    if 'query-continue' not in res: 
        return conta
    else:
        parametri=params.copy()
        lastContinue=res['query-continue']
        lastContinue=lastContinue['links']
        lastContinue=lastContinue['gplcontinue']

        parametri['gplcontinue']=lastContinue
        query(parametri,conta) 

paramet = {'action':'query',
    'pageids':'44776',
    'generator':'links',
    'gpllimit':'max'
}
x=query(paramet,0)
print x

It return the correct value if it never execute the else block. Instead, if it execute at least one time the else block, then it return always None. Why?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You are ignoring the return value of the recursive call. You still need to return what the recursive call to query() returns explicitly:

else:
    parametri=params.copy()
    lastContinue=res['query-continue']
    lastContinue=lastContinue['links']
    lastContinue=lastContinue['gplcontinue']

    parametri['gplcontinue']=lastContinue
    return query(parametri,conta) 

otherwise the outer invocation of query() just ends and returns the default value, which is None.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...