493333王中王开奖结果python函数默认参数作用域

2019-10-14 17:17栏目:新闻资讯
TAG:

当def函数参数暗中认可值为对象时,比如列表[],字典{}

 

演示1:猜想一下,会输出什么??? 

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:Python27python.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:Python27python.exe D:/untitled1/temp5.py
170580872
[1]
171586568
['a', 'b', 'c', 2]
170580872
[1, 3]

从输出中,能够看见,除了,第三个print,别的三个内部存储器是一们的。那么思量一下为何第三个为被转移。结果断定,因为第二个print更改了,b对象,重新创制了三个对象。

 

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

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,通过项目剖断来,进行内部管理理

 

小结:

       1.python定义def的时候,如若参数做为对象,那么,若无改观那一个指标的前提下,那么便是,多次调用该函数也,不会创建新的对象。

          那么就可以晤世一再调用函数,有非常大希望都开展了拍卖。

  2.只要,未有例外须要,函数参数,尽量不使用对象,假若一有必要,对象开展内部管理理。传暗中认可值None

 

版权声明:本文由493333王中王开奖结果发布于新闻资讯,转载请注明出处:493333王中王开奖结果python函数默认参数作用域