函数默认参数的坑

def extendList(val,list=[]):
    list.append(val)
    return list

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']

#默认参数定义的是可变数据类型时有坑。
#默认参数定义成可变数据类型后,如果调用函数时使用的是默认参数,那么使用的都是同一个内存空间,如果在某一次调用中进行了修改的话,那么以后再次调用此默认参数时参数已经被改变了。
#如果调用的时候传入了参数,那么就开辟新的内存空间,做的更改也是在新的空间中更改的,和默认参数的内存空间没有关系。
#默认参数一定要是不可变参数
def extendList(val,list=[]):
    list.append(val)
    return list
print('list1=%s'% extendList(10))
print('list2=%s'% extendList(123,[]))
print('list3=%s'% extendList('a'))

#结果
list1=[10]
list2=[123]
list3=[10,'a']

#和上面的是同种类型的,只不过上一种是全部执行完后才打印,这种情况是执行一次打印一次
posted @ 2019-07-19 15:29  忘川的彼岸  阅读(600)  评论(0编辑  收藏  举报