Python传参陷阱
文章目录
前言
简单的传参背后却藏匿着粗心就会完蛋的大坑。
默认传参
设计一个Python函数时,免不了用到默认传参;默认传参时,又免不了用到列表类型。如下面这样:
def add_elem_to_list(something, list_=[]):
for i in something:
list_.append(i)
乍看之下,好似没什么问题,我们像下边这样调用,同时试着打印list_:
add_elem_to_list(["z", "t", "y"])
# 输出:
['z', 't', 'y']
毫无意外,输出内容是我们想要的结果。我们再多调用这个函数几次,局面马上就要失控了:
def add_elem_to_list(something, list_=[]):
for i in something:
list_.append(i)
print(list_)
if __name__ == "__main__":
print("第一次调用", end=":")
add_elem_to_list(["z", "t", "y"])
print("第二次调用", end=":")
add_elem_to_list([5, 1, 2])
print("第三次调用", end=":")
add_elem_to_list(["有关心情"])
# 输出:
第一次调用:['z', 't', 'y']
第二次调用:['z', 't', 'y', 5, 1, 2]
第三次调用:['z', 't', 'y', 5, 1, 2