@修飾符
'@'符號用作函數修飾符是python2.4新增加的功能,修飾符必須出現在函數定義前一行,不允許和函數定義在同一行。也就是說@A def f(): 是非法的。 只可以在模塊或類定義層內對函數進行修飾,不允許修修飾一個類。一個修飾符就是一個函數,它將被修飾的函數做為參數,並返回修飾后的同名函數或其它可調用的東西。
本質上講,裝飾符@類似於回調函數,把其它的函數(暫且稱為目的參數)作為自己的入參,在目的函數執行前,執行一些自己的操作,比如:計數、打印一些提示信息等,然后返回目的函數。下面列舉一個簡單的例子。
import time def time(func): print(time.ctime()) return func() @time # 從這里可以看出@time 等價於 time(xxx()),但是這種寫法你得考慮python代碼的執行順序 def xxx(): print('Hello world!') 運行結果: Wed Jul 26 23:01:21 2017 Hello world!
*args和**kwargs
當函數的參數不確定時,可以使用*args 和**kwargs,*args 沒有key值,**kwargs有key值。這兩個是python中的可變參數。*args表示任何多個無名參數,它是一個tuple;**kwargs表示關鍵字參數,它是一個dict。並且同時使用*args和**kwargs時,必須*args參數列要在**kwargs前。例如:foo(name,age,date=newdate,birthday=date)
super()