python函数默许参数成效域

         
那么就能够见世数十次调用函数,有非常大概率都进展了拍卖。

开头值设置为None,通过品种判别来,进行内部管理理

 

输出结果:

小结:

      
1.python概念def的时候,固然参数做为对象,那么,若无改观那几个目的的前提下,那么固然,多次调用该函数也,不会创立新的靶子。

那么风度翩翩旦不想现身,每趟调用,私下认可值对象不改变的标题,能够这么改一下:

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
[1]
['a', 'b', 'c', 2]
[1, 3]

 

 

 

 

  2.假诺,未有异样供给,函数参数,尽量不接纳对象,假诺风流倜傥有亟待,对象举行内部管理理。传暗许值None

 

从出口中,能够观望,除了,第二个print,此外三个内部存储器是生机勃勃们的。那么寻思一下为何第一个为被改成。结果料定,因为第2个print改造了,b对象,重新成立了三个目的。

当def函数参数暗中认可值为指标时,举个例子列表[],字典{}

def ddd(a,b=[]):
    b.append(a)
    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]

[1] 
[‘a’,’b’,’c’,’2′] [3]   ?????你是或不是认为是那样? 输出一下拜望

见到上述结果有怎样主张,为啥呢???[1,
3]而不是[3],那么改革一下代码,输出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))

出口结果:

相关文章