函數是帶有名字的代碼塊,能夠執行特定的任務。當咱們須要執行這一特定任務時,調用該函數。固然若是須要屢次執行該任務,只需屢次調用該函數便可。定義函數的時候,咱們把參數的名字和位置肯定下來,函數的接口定義就完成了。對於函數的調用者來講,只須要知道如何傳遞正確的參數,以及函數將返回什麼樣的值就夠了,函數內部的複雜邏輯被封裝起來,調用者無需瞭解。python
函數定義的時候使用的參數叫形參,函數調用的時候使用的參數叫實參。函數
def f(n): # 在函數定義過程當中使用的參數是形參:n print('The argument is:',n) #該函數僅僅打印一句話 return None # 函數反饋空值None # 如下爲函數的調用,支持多種數據類型: >>> f(100) # 實參爲Number型 The argument is: 100 >>> f('It is funny') # 實參爲str型 The argument is: It is funny >>> f((1,2,3)) # 實參爲tuple型 The argument is: (1, 2, 3) >>> f([1,2,3]) # 實參爲list型 The argument is: [1, 2, 3] >>> f({'name':'Adam','age':18}) # 實參爲dict型 The argument is: {'name': 'Adam', 'age': 18}
在函數定義的時候,形參能夠有默認值,以上代碼能夠修改成:code
def f(n=1): # 形參n的默認值爲1,表示在函數調用不輸入實參時,實參則取默認值 print('The argument is:',n) #該函數僅僅打印一句話 return None # 函數反饋空值None # 函數調用: >>> f() # 能夠不輸入實參直接調用函數,實參則取默認值 The argument is: 1
函數調用中的實參與函數定義中形參以相同的順序關聯,這種關聯方式稱爲位置實參。使用位置實參調用函數時,若是實參的順序不正確,結果可能出乎意料,乃至出錯。接口
# 函數定義 def f(name,age): print(name) print(age) # 函數調用 >>> f('Cathy',18) Cathy 18
關鍵字實參,在函數調用時直接將實參的名稱與值關聯起來,所以向函數傳遞的實參不會混淆。關鍵字實參能夠讓函數調用無需考慮實參的順序。it
# 函數定義 def f(name,age): print(name) print(age) # 函數調用 >>> f(age=18,name='Cathy') Cathy 18
# 函數定義 def f_lt(*n): print(type(n)) # *號將傳進來的參數變成了tuple類型 for i in n: print(i) # 函數調用 # 第一次調用 f_lt(1,2,3,4,5) print('_ '*20) # 第二次調用,參數爲list類型 l = [1,2,3,4,5] f_lt(*l) print('_ '*20) # 第三次調用,參數爲tuple類型 t = (1,2,3,4,5) f_lt(*t) print('_ '*20) # 返回結果 <class 'tuple'> 1 2 3 4 5 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <class 'tuple'> 1 2 3 4 5 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <class 'tuple'> 1 2 3 4 5 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
# 函數定義 def f_d(**kw): print(type(kw)) # **號將傳進來的參數變成了dict類型 print(kw) for k,v in kw.items(): print(k,': ',v) # 函數調用 # 第一次調用 f_d(name='Adam',age=18) print('_ '*20) # 第二次調用,參數爲dict類型 d = {'name':'Bob','Age':19} f_d(**d) print('_ '*20) # 返回結果 <class 'dict'> {'name': 'Adam', 'age': 18} name : Adam age : 18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <class 'dict'> {'name': 'Bob', 'Age': 19} name : Bob Age : 19 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _