首先看例子:
1 def modify_default_value(param=[]):
2 param.append('value')
3 print param
4 modify_default_value()
5 modify_default_value()
輸出:
['value']
['value', 'value']
為什么第二輸出會與第一行輸出不一樣?有點(diǎn)違反直覺,不是嗎?
在python中參數(shù)默認(rèn)
值存儲在函數(shù)對象里,當(dāng)這個值是個可修改對象(mutable object)時(如:list,dictionary),函數(shù)中對默認(rèn)參數(shù)值的修改會徹底地改變這個函數(shù)的參數(shù)默認(rèn)值,這也就是為什么第二次調(diào)用modify_default_value輸出會不一樣了.為了更好地理解函數(shù)參數(shù)默認(rèn)值,試試從函數(shù)外部探查一下函數(shù)的參數(shù)默認(rèn)值:
print modify_default_value.func_defaults
輸出:
['value', 'value']