来源:python中国网 时间:2020-03-15

  python函数可以有默认参数,但是当你给一个默认参数传值为为可变数据类型时,你会发现一些奇葩的问题。案例如下:

# -*- coding: utf-8 -*-


def append_to(num, my_list=[]):
    my_list.append(num)
    return my_list


a = append_to(5)
print('a是',a)

b = append_to(6)
print('a是',a) # 此时a跟着变了
print('b是',b)


a是 [5]
a是 [5, 6]
b是 [5, 6]


  原因为何呢?因为python函数的默认参数语句,在 def 关键字定义函数的时候被求值,且仅执行这一次。相当于一旦 完成了上面函数的定义,一个新的列表就创建出来了,而且在随后的每一次函数调用中被使用的都是这个列表。

  不知道为什么python语言会这么设计,老外的脑袋真是脑洞大!为了避免这种问题,我们干脆用下面的写法,简单实用

# -*- coding: utf-8 -*-


def append_to(num):
    my_list = []
    my_list.append(num)
    return my_list


a = append_to(5)
print('a是',a)

b = append_to(6)
print('a是',a) # 此时a跟着变了
print('b是',b)




a是 [5]
a是 [5]
b是 [6]