函數式編程最重要的是增強代碼的重用性和可讀性
1 def 函數名(參數): 2 3 ... 4 函數體 5 ...
函數的定義主要有如下要點:
- def:表示函數的關鍵字
- 函數名:函數的名稱,日后根據函數名調用函數
- 函數體:函數中進行一系列的邏輯計算,如:發送郵件、計算出 [11,22,38,888,2]中的最大數等...
- 參數:為函數體提供數據
- 返回值:當函數執行完畢后,可以給調用者返回數據。
以上要點中,比較重要有參數和返回值:
1、返回值
函數是一個功能塊,該功能到底執行成功與否,需要通過返回值來告知調用者。

def 發送短信():
發送短信的代碼...
if 發送成功:
return True
else:
return False
while True:
# 每次執行發送短信函數,都會將返回值自動賦值給result
# 之后,可以根據result來寫日志,或重發等操作
result = 發送短信()
if result == False:
記錄日志,短信發送失敗...
2.參數
函數的有三中不同的參數:
- 普通參數
- 默認參數
- 動態參數
普通參數:
普通參數的傳遞並沒有個數和數據類型的限制,可以傳遞字符串,數字,列表和字典。也不限定個數,需要注意的是:函數需要多少參數,調用的時候就要按照它定義時的順序和數據類型傳遞過去。
1 def argtest(name,age,fruit_lst,hobby_dic): 2 print 'Hello,me name is %s,i\'m %d year\'s old'%(name,age) 3 print 'My favorite fruits are : %s'%'.'.join(fruit_lst) 4 print 'My hobbies:' 5 for hobby in hobby_dic: 6 print '\t%s'%hobby_dic[hobby] 7 8 lst = ['apple','banana','watermelon'] 9 dic = {'hobby one':'teaism','hobby two':'sing'} 10 argtest('Eva_J',18,lst,dic)
輸出的內容:
Hello,me name is Eva_J,i'm 18 year's old
My favorite fruits are : apple.banana.watermelon
My hobbies:
teaism
sing
默認參數:
默認參數是給參數加上一個默認的值,但我們調用函數的時候,如果傳遞了這個參數,那么使用我們傳遞過來的值;如果不傳則使用默認的值,默認參數可以有多個,但是必須放在所有參數的最后。當我們有多個默認參數的時候,調用函數的時候可以使用參數名指定其中的某一個參數,以保證參數能准確的傳遞給被調用的函數。
1 def argvtest(argv1,argv2 = 'aaa',argv3 = 'bbb'): 2 print 'argv1:',argv1 3 print 'argv2:',argv2 4 print 'argv3:',argv3 5 6 argvtest('a1',argv3 = 'a2')
輸出的內容:
argv1: a1
argv2: aaa
argv3: a2
動態參數:
def func(*args) 接受多個參數,內部自動構造元組,序列前加*,避免內部構造元組
def func(**kwargs) 接收多個參數,內部自動構造字典,序列前加**,直接傳遞字典
def func(*args,**kwargs):接受多個參數,既可以自動構造元組,又可以自動構造字典。
下圖從左至右展示了自動構造元組,自動構造字典及前兩者綜合的參數傳遞方式: