Python中期小結 : 動態默認參數的描述

前言:

以下函數默認包括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)

這樣得到的結果就是不同的時間戳,符合需求.


  1. 參數的默認值,在載入並且活的函數的定義的時候,便已經存在
  2. 需要動態關鍵字參數的時候,習慣上使用None來作為參數初始化

推薦閱讀:

TAG:Python編程 | 學習 | Python入門 |