python函数默认参数作用域金沙网址

当def函数参数私下认可值为目标时,比方列表[],字典{}

 

以身作则一:估摸一下,会输出什么??? 

def ddd(a,b=[]):
    b.append(a)
    return b

print(ddd(1))
print(ddd(2,['a','b','c']))
print(ddd(3))

 

[1] 
[‘a’,’b’,’c’,’2′] [3]   ?????你是不是感觉是那样? 输出一向下探底望

出口结果:

D:\Python27\python.exe D:/untitled1/temp5.py
[1]
['a', 'b', 'c', 2]
[1, 3]

 

旁观上述结果有如何主见,为何吗???[1,
3]而不是[3],那么修改一下代码,输出b变量的内部存款和储蓄器地址看一下。笔者想,能够找到本人要的答案

def ddd(a,b=[]):
    b.append(a)
    print(id(b)) #查看内存地址
    return b

print(ddd(1))
print(ddd(2,['a','b','c']))
print(ddd(3))

输出结果:

D:\Python27\python.exe D:/untitled1/temp5.py
170580872
[1]
171586568
['a', 'b', 'c', 2]
170580872
[1, 3]

从输出中,能够见到,除了,第一个print,别的八个内部存款和储蓄器是一们的。那么思虑一下为啥第二个为被改变。结果料定,因为首个print改换了,b对象,重新创立了1个目标。

 

这正是说只要不想出现,每一回调用,暗中认可值对象不改变的难题,能够如此改一下:

def ddd(a,b=None):
    if type(b).__name__!='list':
        b = []

    b.append(a)
    print(id(b)) #查看内存地址
    return b

print(ddd(1))
print(ddd(2,['a','b','c']))
print(ddd(3))

开头值设置为None,通过项目推断来,实行内部管理理

 

小结:

      
一.python定义def的时候,借使参数做为对象,那么,纵然未有变动那么些目标的前提下,那么固然,多次调用该函数也,不会创立新的靶子。

         
那么就会油然则生数13回调用函数,有相当的大可能率都进展了管理。

  2.一旦,未有新鲜供给,函数参数,尽量不选拔对象,如若1有须要,对象举行内管理。传私下认可值None

 

相关文章