在下面的代码中,我一直想知道如何确定是否给出了参数b
。
问题在于,func
的第三次调用未将[5]
保留在新创建的列表中,而是保留了b
所指向的开头的某个指针。我猜想这是在程序堆栈中定义的,它之前是输入func
本身进行调用,因此func
的调用和返回不会更改b
...?
任何见识都会受到赞赏。
def func(a, b=[]):
b.append([a])
print(b)
return b
func(3)
func(4, [])
func(5)
答案 0 :(得分:2)
最好的方法是将b的默认值分配给任意值(通常为None
),然后检查b是否以这种方式定义:
def func(a, b=None):
if b is None:
b = []
b.append([a])
print(b)
return b
func(3)
func(4, [])
func(5)
答案 1 :(得分:1)
您可以将b定义为默认值,例如b=None
,然后选择b的值(如果给出),或选择一个空列表。
def func(a, b=None):
lst = b or []
lst.append([a])
print(lst)
return lst
func(3)
#[[3]]
func(4, [])
#[[4]]
func(5)
#[[5]]