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