Python小白學習之路(十)—【函數】【函數返回值】【函數參數】
阿新 • • 發佈:2018-10-31
函數返回值 列表 默認參數 print 關鍵字 內部 if條件語句 pre 提取
寫在前面:
昨天早睡之後,感覺今天已經恢復了百分之八十的樣子
又是活力滿滿的小夥郭
今日份雞湯:
我始終相信,在這個世界上,一定有另一個自己,在做著我不敢做的事,在過著我想過的生活。-------宮崎駿
函數
一、函數出現的背景
在學習函數之前,一直遵循:面向過程編程,
即:根據業務邏輯從上到下實現功能,其往往用一長段代碼來實現指定功能,
開發過程中最常見的操作就是粘貼復制,
也就是將之前實現的代碼塊復制到現需功能處,如下:
while True: if cpu利用率 > 90%: #發送郵件提醒 連接郵箱服務器 發送郵件 關閉連接 if 硬盤使用空間 > 90%: #發送郵件提醒 連接郵箱服務器 發送郵件 關閉連接if 內存占用 > 80%: #發送郵件提醒 連接郵箱服務器 發送郵件 關閉連接
但是,學習了函數之後,if條件語句下的內容實質是相同的,可以將其提取出來
進行公用。修改後的程序如下:
def 發送郵件(內容) #發送郵件提醒 連接郵箱服務器 發送郵件 關閉連接 while True: if cpu利用率 > 90%: 發送郵件(‘CPU報警‘) if 硬盤使用空間 > 90%: 發送郵件(‘硬盤報警‘) if 內存占用 > 80%: 發送郵件(‘內存報警‘)
對於上述的兩種實現方式,第二次必然比第一次的重用性和可讀性要好,
第二次稱為函數式編程
第一次稱為面向過程編程
- 總結使用函數的好處:
- 代碼重用
- 保持一致性,易維護
- 可擴展性
二、函數的定義
python中函數定義:函數式邏輯結構化和過程化的一種編程方法
def 函數名(參數): ... 函數體 ... 返回值
函數的定義主要有如下要點:
- def:表示函數的關鍵字
- 函數名:函數的名稱,日後根據函數名調用函數
- 參數:為函數體提供數據
- 函數體:函數中進行一系列的邏輯計算,如:發送郵件、計算出 [11,22,38,888,2]中的最大數等...
- 返回值:當函數執行完畢後,可以給調用者返回數據。
舉例:
def test(x): "The function definitions" x+=1 return x
- def:定義函數的關鍵字
- test:函數名
- ():內可定義形參
- "":文檔描述(非必要,但是強烈建議為你的函數添加描述信息)
- x+=1:泛指代碼塊或程序處理邏輯
- return:定義返回值
以上要點中,比較重要有參數和返回值。
1.返回值:
函數是一個功能塊,該功能到底執行成功與否,需要通過返回值來告知調用者。
過程定義:過程就是簡單特殊沒有返回值的函數
總結:當一個函數/過程沒有使用return顯示的定義返回值時,python解釋器會隱式的返回None,
所以在python中即便是過程也可以算作函數。
- 總結:
- 返回值數=0:返回None
- 返回值數=1:返回object
- 返回值數>1:返回tuple
2.參數:
舉例: # ######### 定義函數 ######### # name 叫做函數func的形式參數,簡稱:形參 def func(name): print name # ######### 執行函數 ######### # ‘xhg‘ 叫做函數func的實際參數,簡稱:實參 func(‘xhg‘)
2.1形參
形參變量只有在被調用時才分配內存單元,
在調用結束時,即刻釋放所分配的內存單元。
因此,形參只在函數內部有效。
函數調用結束返回主調用函數後則不能再使用該形參變量
2.2實參
實參可以是常量、變量、表達式、函數等,
無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。
因此應預先用賦值,輸入等辦法使參數獲得確定值
2.3位置參數和關鍵字
#位置參數,必須一一對應,缺一不行,多一也不行 def test(x,y,z): # x = 1;y = 2; z = 3 print(x) print(y) print(z) test(1,2,3)
#關鍵字參數,無需一一對應,缺一不行,多一也不行 def test(x,y,z): print(x) print(y) print(z) test(y=1,z=22,x=3)
#關鍵字參數和位置參數混合使用時,位置參數必須在關鍵字參數左邊 def test(x,y,z): print(x) print(y) print(z) test(1,y=2,3)#報錯 test(1,3,y=2)#報錯 test(1,2,z=3)#正確
2.4默認參數
def func(name, age=18): print("%s:%s" % (name, age)) # 指定參數 func(‘xhg‘, 19) #執行結果 xhg:19 # 使用默認參數 func(‘alex‘) #執行結果 alex:18
2.5參數組
- 非固定長度的參數
- *args 針對位置參數傳遞
- **kwargs 針對關鍵字參數傳遞
- *表傳遞的數據類型為列表
- **表傳遞的數據類型為字典
#*args 針對位置參數傳遞 def func(*args): print(args) func(1,2,3,4,‘xhg‘,‘python‘)
#*args 針對位置參數傳遞,實參以列表形式,需要*表明 def func(*args): print(args) li = [1,2,3,4,‘xhg‘,‘python‘] func(*li)
#**kwargs 針對關鍵字參數傳遞 def func(x,**kwargs): print(x) print(kwargs) func(12, name = ‘xhg‘,age =18)
#**kwargs 針對位置參數傳遞,實參以字典形式,需要**表明 def func(x,**kwargs): print(x) print(kwargs) s = {‘name‘: ‘xhg‘,‘age‘:18} func(12, **s)
def func(x, *args, **kwargs): print(x) print(args) print(kwargs) li = [2, 2, 2, 2] s = {‘z‘: 3, ‘v ‘: 3} func(1, *li, **s) #執行結果 1 (2, 2, 2, 2) {‘z‘: 3, ‘v‘: 3}
def func(x, *args, **kwargs): print(x) print(args) print(kwargs) func(1, 2, 2, 2, 2, z = 3, v = 3) #執行結果 1 (2, 2, 2, 2) {‘z‘: 3, ‘v‘: 3}
Python小白學習之路(十)—【函數】【函數返回值】【函數參數】