Python函数小节

定义函数时,默认参数必须指向不变的对象

参数为可变对象时,正常调用的时候,结果没有问题,但是当使用默认参数的时候,结果就会和理想的有差距。

In [78]: def add(L=[]):
    ...:     L.append('END')
    ...:      return L
    ...:

In [79]: add(L=[1,2,3])
Out[79]: [1, 2, 3, 'END']

In [80]: add()
Out[80]: ['END']

In [81]: add()
Out[81]: ['END', 'END']

原因:Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
修改如下:使用None这个不变得对象来实现。

In [84]: def add(L=None):
    ...:      if L is None:
    ...:          L = []
    ...:      L.append('END')
    ...:      return L
posted @ 2019-04-25 22:11  Show_you  阅读(173)  评论(0编辑  收藏  举报