在Python中操作默认参数值

问题描述 投票:0回答:2

考虑下面的代码。它涉及到一个非常有趣的Python概念的应用,即在递归期间使用默认参数[反转列表] A = [1,2,3,4]

def recur(A,Q=[]): 
    if len(A)==1: 
        Q.append(A[0])
        return 
    recur(A[1:],Q)
    Q.append(A[0])
    return Q
print(recur(A)) # 4 3 2 1

问题是,当我再次调用这个函数时,Q 将不为空。当递归调用完成时,有没有办法设置 Q=[] ?

注意:我的目的不是反转列表,只是为了演示。谢谢

python recursion default-value default-arguments
2个回答
2
投票

首次运行脚本时,您正在初始化并使

Q
不可变,无论调用函数还是将来的输入。您每次在函数中都需要重新创建
Q
作为新列表。

试试这个:

def recur(A,Q=None):
    if Q == None:
        Q = []
    if len(A)==1: 
        Q.append(A[0])
        return 
    recur(A[1:],Q)
    Q.append(A[0])
    return Q

print(recur([4, 3, 2, 1])) # 1 2 3 4
print(recur([1, 2, 3, 4])) # 4 3 2 1

0
投票

或者完全没有默认参数:

def _recur(A, Q):
    ...

def recur(A):
    return _recur(A, [])
© www.soinside.com 2019 - 2024. All rights reserved.