python學習——基礎(三)

定義函數時,須要肯定函數名和參數個數; python

若是有必要,能夠先對參數的數據類型作檢查; 數組

函數體內部能夠用return隨時返回函數結果; 函數

函數執行完畢也沒有return語句時,自動return None。 spa

函數能夠同時返回多個值,但其實就是一個tuple。 code


默認參數


# 該方法的擴展,由調用者能夠自動求三次方、四次方
def power(x, n=2):
    if not isinstance(x, (int, float)):
        raise TypeError('傳的參數必須是整型或浮點型')

    sum = 1
    while n > 0:
        sum = sum * x
        n = n - 1
    return sum

print power(5, 3)

當調用者power(5)時,默認n=2求平方和; 對象


注:一是必選參數在前,默認參數在後,不然Python的解釋器會報錯(思考一下爲何默認參數不能放在必選參數前面); ci

二是如何設置默認參數。 it

當函數有多個參數時,把變化大的參數放前面,變化小的參數放後面。變化小的參數就能夠做爲默認參數。 class

能夠簡化函數的調用; 擴展


def enroll(name, gender, age=6, city='Beijing'):
    print 'name:', name
    print 'gender:', gender
    print 'age:', age
    print 'city:', city

enroll('syc', 'F',7) # 默認按參數的順序進行賦值;7便是age的值
enroll('syc', 'F', city='hangzhou') # 調用時特指參數

# 定義默認參數要牢記一點:默認參數必須指向不變對象!


可變參數


在Python函數中,還能夠定義可變參數。顧名思義,可變參數就是傳入的參數個數是可變的,能夠是1個、2個到任意個,還能夠是0個。

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

print calc(1, 2, 3, 4) #可變參數,隨意添加減小參數

list = [1,2,3,4] # 當定義一個list時
print calc(*list) # 能夠如此調用

注:當以List數據類型做爲可變參數傳入函數時,List類型數據會轉變爲tuple

關鍵字參數

它能夠擴展函數的功能,好比,在person函數裏,咱們保證能接收到nameage這兩個參數,可是,若是調用者願意提供更多的參數,咱們也能收到。試想你正在作一個用戶註冊的功能,除了用戶名和年齡是必填項外,其餘都是可選項,利用關鍵字參數來定義這個函數就能知足註冊的需求。


def person(name, age, **kw):
    print 'name:', name, 'age:', age, 'other:', kw

kw = {'city': 'Beijing', 'job': 'Engineer'}
print person('Jack', 24, **kw) # name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}


參數組合

def func(a, b, c=0, *args, **kw):
    print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw

args = (1, 2, 3, 4, 5, 6)
kw = {'x': 99, 'y': 20}
func(*args, **kw) # a = 1 b = 2 c = 3 args = (4, 5, 6) kw = {'y': 20, 'x': 99}



因此,對於任意函數,均可以經過相似func(*args, **kw) 的形式調用它,不管它的參數是如何定義的


Python的函數具備很是靈活的參數形態,既能夠實現簡單的調用,又能夠傳入很是複雜的參數。

默認參數必定要用不可變對象,若是是可變對象,運行會有邏輯錯誤!

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

*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})。

使用*args和**kw是Python的習慣寫法,固然也能夠用其餘參數名,但最好使用習慣用法。

相關文章
相關標籤/搜索