猿问

为什么python不返回引用?

我有一个关于Python如何返回值的问题。下面是我简单的python代码练习递归函数。


def brackets(ans, n, cur, open, close):

    if len(cur) == n*2:

        ans.append(cur)   # <---l.1

        return ans        # <---l.2   


    if open < n:

        brackets(ans, n,cur+"(",open+1,close)


    if open > close:

        brackets(ans, n,cur+")",open,close+1)


ans = []

ret = brackets(ans, 2, "", 0,0)  # <---l.3

print(ans)

print(ret)


===== 

return:

['(())', '()()']

None

我想我修改了l.1行上的列表对象并返回它,并且在行l.2上,我传递了第l.3行上的引用。但是当我打印值和时,不包含与 相同的值。ansansansretretans


当然,我只是打印出来以获得正确答案,但我期望Python初始化变量并分配返回引用到行l.3。ansretbracketsret


我对python如何通过函数传递引用感到困惑。请让我知道相关文件或答案。


千巷猫影
浏览 94回答 1
1回答

猛跑小猪

如果的长度不是 ,则该函数不返回任何值。说实话,要知道它应该返回什么并不容易,因为你还没有发布一些预期的结果。也就是说,这里有一些选择:curn*2brackets()始终返回递归调用的值:&nbsp;if open < n:&nbsp; &nbsp; &nbsp;return brackets(ans, n,cur+"(",open+1,close)&nbsp;if open > close:&nbsp; &nbsp; &nbsp;return brackets(ans, n,cur+")",open,close+1)在这种情况下,这将是最终结果:&nbsp;['(())']&nbsp;['(())']或在函数末尾返回:ans&nbsp;return ans这将是输出:&nbsp;['(())', '()()']&nbsp;['(())', '()()']
随时随地看视频慕课网APP

相关分类

Python
我要回答