考虑下面的代码。它涉及到一个非常有趣的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=[] ?
注意:我的目的不是反转列表,只是为了演示。谢谢
首次运行脚本时,您正在初始化并使
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
或者完全没有默认参数:
def _recur(A, Q):
...
def recur(A):
return _recur(A, [])