1. 程式人生 > >Python小白學習之路(十)—【函數】【函數返回值】【函數參數】

Python小白學習之路(十)—【函數】【函數返回值】【函數參數】

函數返回值 列表 默認參數 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小白學習之路(十)—【函數】【函數返回值】【函數參數】