如何隐式地将参数定义为空列表? [重复]

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

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

问题是func的第三次调用并没有在新创建的列表中保留[5],而是在b指向的开头有一些指针。我猜这是在程序堆栈之前定义进入func调用本身,所以func的调用和返回不会改变b ...?

任何见解都表示赞赏。

def func(a, b=[]):

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

func(3)
func(4, [])
func(5)
python kwargs
2个回答
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
投票

您可以将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]]
© www.soinside.com 2019 - 2024. All rights reserved.