码迷,mamicode.com
首页 > 其他好文 > 详细

函数相关注意事项

时间:2019-11-29 00:47:55      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:定义   类型   代码   注意事项   code   计算   会计   重要   append   

默认参数值的陷阱

默认参数值在函数定义的时候并得到计算,如下:

i = 5

def f(arg=i):
    print(arg)

i = 6
f()

最后输出的结果为5,因为默认值已在函数定义时得到计算。
重要警告:默认值仅被计算一次。 当默认值是可变对象(例如列表,字典或大多数类的实例)时,这会有所不同。 例如,以下函数累积在后续调用中传递给它的参数:

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))

这段代码将输出:

[1]
[1, 2]
[1, 2, 3]

这是因为L的默认值在定义时为[],且只会计算一次,当多次调用该函数时,L的默认值不会重新计算为[],而是原先的list对象,又因为list对象为可变类型。
如果不希望在后续调用之间共享默认参数值,则可以编写如下函数:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

函数相关注意事项

标签:定义   类型   代码   注意事项   code   计算   会计   重要   append   

原文地址:https://www.cnblogs.com/jeffrey-yang/p/11955013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!