Python中函式的引數 arguments

2021-08-21 21:19:40 字數 2367 閱讀 2037

歸納起來,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]

print

(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...