18. 什么是python的默认参数陷阱问题

python的默认参数在函数定义时进行赋值,并且会存下来,如果这个参数是可变的变量,并且后续也进行修改, 那就表示默认值也进行了修改,其后也使用这个默认值进行调用,后续调用就存在问题。例如::

def fn(item, aList = []):
    aList.append(item)
    return aList

fn("a")
fn("b" [1,2,3])
fn("c")          #这里会使用前面修改过得默认值。

另外一个例子,设置默认参数为时间,结果时间始终为首次加载该函数的时间。 因此不能这样使用

import time

def log_msg(msg, logTime=time.time()):
    print("msg %s, %f" % (msg, logTime))

log_msg("hello1")
time.sleep(1)
log_msg("hello2")