什么是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")