python引數

烏雲上發表於2018-05-03

引數

python的函式具有很靈活的引數形式,可以是:

位置引數(最常見的引數,可以使用tuple代替),

預設引數(給預設值),

可變引數(引數的個數可以改變,傳入的其實是list或者tuple),

關鍵字引數(傳入的其實是dict)。

位置引數

#引數
#位置引數 預設引數
#計算x的n次方
def power(x,n=2):
    s=1
    while n>0:
        s=s*x
        n=n-1
    return s
print(power(3))
》9

print(power(4,4))
》256

預設引數

#預設引數 小心有坑
def add_end(L=[]):
    L.append(`end`)
    print( L)
add_end()
》[`end`]

add_end()
》[`end`, `end`]

這裡第二次呼叫方法的時候輸出不再是[`end`]而是[`end`, `end`]

定義預設引數要牢記一點:預設引數必須指向不變物件!

要修改上面的例子,我們可以用None這個不變物件來實現:

def add_end(L=None):
    if L is None:
        L=[]
    L.append(`end`)
    print( L)
add_end()
》[`end`]

add_end()
》[`end`]

這樣無論呼叫多少次都輸出[`end`]

可變引數

在引數前面加一個星號*,函式內部引數接受到的是一個tuple

#可變引數
#計算a2 + b2 + c2 + ……
def calc(*arg):
    sum=0
    for n in arg:
        sum=sum+n*n
    return sum
print(calc(1,2,3,4))
》30

也可以直接把一個list或者tuple的元素變成可變引數傳進去,在變數前面加一個星號*

#把list或者tuple做可變引數
num=list(range(1,4))
print(calc(*num))
》14

關鍵字引數

引數可以是0個或任意帶引數名的引數,這些引數在函式內部自動組成為一個dict

#關鍵字引數
def person(name,age,**kw):
    print(`name:`,name,` age:`,age,`other:`,kw)
person(`Peter`,35)
》name: Peter  age: 35 other: {}

person(`Peter`,35,city=`SH`,sex=`F`)
》name: Peter  age: 35 other: {`city`: `SH`, `sex`: `F`}

#把dict做關鍵字引數
extra={`city`:`SH`,`job`:`Engineer`}
person(`Peter`,35,**extra)
》name: Peter  age: 35 other: {`city`: `SH`, `job`: `Engineer`}

要注意定義可變引數和關鍵字引數的語法:

*args是可變引數,args接收的是一個tuple;

**kw是關鍵字引數,kw接收的是一個dict。

 

可變引數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,

再通過*args傳入:func(*(1, 2, 3))

 

關鍵字引數既可以直接傳入:func(a=1, b=2),又可以先組裝dict,

再通過**kw傳入:func(**{`a`: 1, `b`: 2})

請注意:

引數定義的順序必須是:必選引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數。

對於任意函式,都可以通過類似func(*args, **kw)的形式呼叫它,無論它的引數是如何定義的。

  

 


相關文章