首页 > 解决方案 > 如何隐式定义空列表的参数?

问题描述

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

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

任何见解都值得赞赏。

def func(a, b=[]):

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

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

标签: pythonkeyword-argument

解决方案


最好的方法是将 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)

推荐阅读