你的位置:首页 > 操作系统

[操作系统]廖雪峰python教程的第一个疑问


函数的参数一节中提到:

  def add_end(L = []);

    L.append('END')

    return L

正常调用add_end时(也就是有参数传入时):

  

  >>> add_end([1, 2, 3])  [1, 2, 3, 'END']  >>> add_end(['x', 'y', 'z'])  ['x', 'y', 'z', 'END']

当使用默认参数时:
>>> add_end()['END']

>>> add_end()['END', 'END']>>> add_end()['END', 'END', 'END']

廖雪峰解释如下:

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

我的理解如下:

  第一行,传入参数[1,2,3],接下来的代码都是针对[1,2,3] 的,跟L = [] 没有关系,第三行和第一行一样,这两次都没涉及到L = [] ,所以L的值不变。第二行没有传入参数,所以接下来的代码是针对L了,由[]变成了['END'],第四行还是针对L,但L的值已经变成了['END'],又运行一次,所以就变成了['END','END'] 。

改进的方式如下:

def add_end(L=None):  if L is None:    L = []  L.append('END')  return L

>>> add_end()['END']>>> add_end()['END']

但是我对if L is None : L = [] 这一句还不理解,希望后续能明白吧。