#!/usr/bin/env python3 def compute(base, value): base.append(value) result = sum(base) print(result) if __name__ == '__main__': testlist = [10, 20, 30] compute(testlist, 15) compute(testlist, 25) compute(testlist, 35)
在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!
预期输出的是:
$ python3 /home/shiyanlou/listbugtest.py
75
85
95
但现在的程序输出的是:
$ python3 /home/shiyanlou/listbugtest.py
75
100
135
基本的请参考:https://blog.csdn.net/ztf312/article/details/81010274
def f(x,li=[]): for i in range(x): li.append(i*i) print(li) print('---1---') f(4) print('---2---') f(5)
预期结果:
---1--- [0, 1, 4, 9] ---2--- [0, 1, 4, 9, 16]
执行结果:
---1--- [0, 1, 4, 9] ---2--- [0, 1, 4, 9, 0, 1, 4, 9, 16]
优化:
def f(x, li=[]): if not li: # 如果li不为空的话,就往下走(清空列表); 为空就不走 li = [] for i in range(x): li.append(i * i) print(li) print('---1---') f(4) print('---2---') f(5) print('---3---') f(6)