python里的默认参数

 

def extendList(val, test=[]):
    test.append(val)
    return test
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print("list1 = %s" % list1)
print("list2 = %s" % list2)
print("list3 = %s" % list3)
运行结果:
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

    如上述代码运行结果,我开始学习python的时候,也会认为list1应该输出10,list3应该输出a,但并不是这样的,在某方法默认参数为test=[],当调用该方法,当没有的为其传入值的时候,正如list1和list3显示的那样,他们两个调用的方法中操作的test对应的是同一地址空间下的list,所以会如此的输出。

   我们可以采用如下的方式来避免这样的问题:

def extendList(val, test=None):
    if test == None:
        test = []
    test.append(val)
    return test

 

posted @ 2018-07-08 12:44  赵凯强  阅读(129)  评论(0编辑  收藏  举报