这个问题在这里已有答案:
在下面的代码中,我一直想知道如何判断是否给出了参数b
。
问题是func
的第三次调用并没有在新创建的列表中保留[5]
,而是在b
指向的开头有一些指针。我猜这是在程序堆栈之前定义进入func
调用本身,所以func
的调用和返回不会改变b
...?
任何见解都表示赞赏。
def func(a, b=[]):
b.append([a])
print(b)
return b
func(3)
func(4, [])
func(5)
最好的方法是将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)
您可以将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]]