Python -定義函數

在Python中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,然後,在縮進塊中編寫函數體,函數的返回值用return語句返回。

我們以自定義一個求絕對值的my_abs函數爲例:

def my_abs(x):
if x >= 0:
return x
else:
return -x
如果沒有return語句,函數執行完畢後也會返回結果,只是結果爲None。

return None可以簡寫爲return。

空函數

如果想定義一個什麼事也不做的空函數,可以用pass語句:

def nop():
pass

pass語句什麼都不做,那有什麼用?實際上pass可以用來作爲佔位符,比如現在還沒想好怎麼寫函數的代碼,就可以先放一個pass,讓代碼能運行起來。

pass還可以用在其他語句裏,比如:

if age >= 18:
pass

缺少了pass,代碼運行就會有語法錯誤。

參數檢查

調用函數時,如果參數個數不對,Python解釋器會自動檢查出來,並拋出TypeError:
讓我們修改一下my_abs的定義,對參數類型做檢查,只允許整數和浮點數類型的參數。數據類型檢查可以用內置函數isinstance()實現:

def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError(‘bad operand type’)
if x >= 0:
return x
else:
return -x

添加了參數檢查後,如果傳入錯誤的參數類型,函數就可以拋出一個錯誤:

my_abs(‘A’)
Traceback (most recent call last):
File “”, line 1, in
File “”, line 3, in my_abs
TypeError: bad operand type

返回多個值

然後,我們就可以同時獲得返回值:

x, y = move(100, 100, 60, math.pi / 6)
print(x, y)
151.96152422706632 70.0

但其實這只是一種假象,Python函數返回的仍然是單一值:

r = move(100, 100, 60, math.pi / 6)
print(r)
(151.96152422706632, 70.0)
原來返回值是一個tuple!但是,在語法上,返回一個tuple可以省略括號,而多個變量可以同時接收一個tuple,按位置賦給對應的值,所以,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。

小結

定義函數時,需要確定函數名和參數個數;

如果有必要,可以先對參數的數據類型做檢查;

函數體內部可以用return隨時返回函數結果;

函數執行完畢也沒有return語句時,自動return None。

函數可以同時返回多個值,但其實就是一個tuple。

發佈了49 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章