歸納起來,python中函式的定義形式和呼叫形式主要有如下幾種形式:
#函式的定義形式
def func(name) #
匹配positional引數或者keyword引數
def func(name=value) #
如果不傳,有預設引數
def func(*name) #
將額外的positional引數轉換成乙個tuple,然後賦給name
def func(**name) #
將額外的keyword引數轉換成乙個dictionary,然後賦給name
def func(*other, name) #
python 3.x中定義keyword-only引數的形式,python 2.x中不支援,此時,name一定要以keyword的形式傳遞
def func(*, name) #
python 3.x中定義keyword-only引數的形式, python 2.x中不支援,此時, name一定要以keyword的形式傳遞
#函式的呼叫
func(name) #
以positional引數呼叫
func(name=value) #
以keyword引數呼叫
func(*iterable) #
將iterable物件轉換成一連串單個positional引數進行呼叫
func(**dictionary) #
將dictionary轉換成keywrod引數進行呼叫
這裡需要注意3點:
1 在python 2.x中(在python 3.x中,這種形式已經不允許了),還有一種定義函式的方式,就是將函式的引數定義成乙個tuple,那麼,當呼叫函式的時候,傳遞乙個結構一樣的tuple引數,這個tuple引數就會被unpack:
#定義def
func((a, (b, c))#呼叫
func((1, (2, 3)) #
a=1, b=2, c=3
func((1, [2, 3])) #
a=1, b=2, c=3,這樣呼叫也是可以的
func((1, '
mn')) #
a=1, b='m', c='n', 這樣也可以,也就是說呼叫的時候只要是序列都可以
#但是定義的時候只能是tuple,不能出現其他序列,比如陣列,下面的情形是不對的
def func((a, [b, c]))
def func(*a, **b)a=(1, 2)
b=func(*a, **b) #
python 2.x和python 3.x均支援
#僅python 2.x支援,效果一樣
3 對於預設引數,尤其要注意可變物件,每一次以預設形式象呼叫函式,這個預設的引數會被重用,而不會重置:
def func(a=):a += [1]
(a)>>>func()
[1]>>>func() #
此時a的值是[1]
[1, 1]
>>>func() #
此時a的值是[1, 1]
[1, 1, 1]
函式定義時引數的順序以及函式呼叫時引數的順序
python中,定義函式和呼叫函式時,引數的順序有一定的規則,如果不符合規則,python會報錯:
1 在定義函式時,引數的順序為:positional引數(name),預設引數(name=value),*name形式(或者只有乙個*,但是只在python 3.x中支援),name或者name=value形式(都只在python 3.x中支援,叫keyword-only引數,後面name=value是賦預設值),**name形式;
2 在呼叫函式時,引數的順序為:positional引數(name),keyword引數(name=value)或者*name形式,**name形式
總之,**name無論在定義函式時,還是在呼叫函式時,都只應出現在最後。
函式引數的匹配步驟
python內部,對於函式引數的匹配大致分為5步:
1 首先匹配positional引數(name)
2 匹配keywrod引數(name=value)
3 將額外的非keyword引數匹配給*name形式
4 將額外的keyword引數匹配給**name形式
5 如果有預設值,給未傳遞的引數賦預設值
經過上述步驟之後,python還需要確保,每乙個引數,只匹配了乙個值,否則,就會報錯。
QT中關於arg 函式
這個函式應該是用引數替代字串中的百分值,從小到大替換,1 99 qt助手有乙個例子如下 code c qstring str str 1 2 str.arg 1f hello returns 1f hello str.arg 1f arg hello returns hellof 2 code st...
Qt中QString的arg()函式使用記錄
qstring arg 是用字串變數引數依次替代字串中最小數值大致有如下3種用法 1 arg str1,str2,str3 其中一次可替換引數個數最多為9個,舉例如下 qstring str qstring 1 2 3 4 5 6 7 8 9 10 11 arg 1 2 3 4 5 6 7 8 9 ...
Python函式引數中的 ,
問題 python的函式定義中有兩種特殊的情況,即出現 的形式。如 def execute command self,args,options 等。解釋 用來傳遞任意個無名字引數,這些引數會乙個tuple的形式訪問。用來處理傳遞任意個有名字的引數,這些引數用dict來訪問。應用 的應用 def fu...