Python中期小結 : 動態默認參數的描述
04-21
前言:
以下函數默認包括time模塊.
現有一個需求,使用datetime方法實現列印當前時間戳,如果你是這麼寫的 :
def time_print(ms,time_chuo=datetime.now()): print(%s:%s%(time_chuo,ms))time_print(now)sleep(0.1)time_print(now1)
以上代碼的結果顯示的兩個時間戳是一樣的,這就很奇怪了,看起來雖然是執行了兩遍函數,但是實際上datetime.now只執行了一遍,參數默認值,在每個模塊載入的時候就已經得到,很多模塊在程序啟動時候就已經載入,一旦這樣載入完畢,所有的參數默認值就不會改變,導致程序最終只執行了一遍datetime.now,而沒有預期的效果.
在python中,我們如果要改正這個函數,將默認值設置為可變,那麼應該是將默認值設置為None:
def time_print(ms,time_chuo=None): time_chuo = datetime.now() if time_chuo is None else time_chuo print(%s:%s%(time_chuo,ms)
這樣得到的結果就是不同的時間戳,符合需求.
- 參數的默認值,在載入並且活的函數的定義的時候,便已經存在
- 需要動態關鍵字參數的時候,習慣上使用None來作為參數初始化
推薦閱讀: