定義函數時,須要肯定函數名和參數個數; 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函數裏,咱們保證能接收到name和age這兩個參數,可是,若是調用者願意提供更多的參數,咱們也能收到。試想你正在作一個用戶註冊的功能,除了用戶名和年齡是必填項外,其餘都是可選項,利用關鍵字參數來定義這個函數就能知足註冊的需求。
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}
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的習慣寫法,固然也能夠用其餘參數名,但最好使用習慣用法。