如何隐式定义一个空列表的参数?

时间:2019-04-21 06:33:07

标签: python kwargs

在下面的代码中,我一直想知道如何确定是否给出了参数b

问题在于,func的第三次调用未将[5]保留在新创建的列表中,而是保留了b所指向的开头的某个指针。我猜想这是在程序堆栈中定义的,它之前是输入func本身进行调用,因此func的调用和返回不会更改b ...?

任何见识都会受到赞赏。

def func(a, b=[]):

    b.append([a])
    print(b)
    return b

func(3)
func(4, [])
func(5)

2 个答案:

答案 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]]