编程语言
首页 > 编程语言> > python列表作为默认参数的问题

python列表作为默认参数的问题

作者:互联网

# coding=utf-8
def foo(a, x=[]):
    x.append(a)
    return x


print(foo(1))
print(foo(2))
# 预想输出
# [1]
# [2]
# 实际输出
# [1]
# [1, 2]
究其原因,原来是这个函数的默认值只在函数被加载时调用一次,之后若不传值则一直都会用加载函数时候设置的值,此值不会再改变。若这个默认值我们设置的是个常量并不会对我们对程序有什么影响,若是个变量,那可就要小心啦!是个变量最后还是当成了常量使用。
那么为了实现符合我们预期对要求,我们就只能像下面这样使用啦。大家都能想到,也就是在函数内部为变量赋值。

正确示例:
# 正确示例
def foo1(a, x=None):
    if x is None:
        x = []
    x.append(a)
    return x


print(foo1(1))
print(foo1(2))
# [1]
# [2]


标签:默认值,函数,示例,python,默认,列表,print,foo,foo1
来源: https://blog.51cto.com/u_13560219/2785967