VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • python中函数的默认参数是空数组

函数的默认参数 如果为空数组:

def default_para_without_trap(para=[], value=0):
    print(id(para))
    para.append(value)
    print(id(para))
    return para

print('第一步')
print('函数返回值:{}'.format(default_para_without_trap(value=100)))
print('第二步')
print('函数返回值:{}'.format(default_para_without_trap(value=50)))

结果:

第一步
1652247234376
1652247234376
函数返回值:[100]
第二步
1652247234376
1652247234376
函数返回值:[100, 50]

可以看出指向的都是同一个内存地址,因为数组是可变容器,里面的值发生改变,但指向的内存地址没有发生改变,所以第二次调用的是第一次已经添加了数据的数组。
而不可变数据类型,因为它的值是如果改变了,内存地址也要相应的变化,所以不会存在这种情况。

所以应该在每次调用时初始化

def default_para_without_trap(para=None, value=0):
    print(id(para))
    if para is None:
        para = []
    print(id(para))
    para.append(value)
    print(id(para))
    return para

print('第一步')
print('函数返回值:{}'.format(default_para_without_trap(value=100)))
print('第二步')
print('函数返回值:{}'.format(default_para_without_trap(value=50)))

第一步
1809481008
1743164737352
1743164737352
函数返回值:[100]
第二步
1809481008
1743164737352
1743164737352
函数返回值:[50]

 
出处:https://www.cnblogs.com/NB01/p/14088296.html


相关教程