#!/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
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)