python中定義函數的關鍵字是def,例如定義一個叫my_function的函數我們可以這麼定義, 其中括號內的x,y為傳入的參數。
def my_function(): # function body
回傳值
函數可以用關鍵字return回傳資料。函數執行到return即返回不再執行函數。沒用寫return語句的函數,預設回傳None。
return None可以簡寫成return。
空函數
如果想要定義一個什麼都不做的函數,那就可以用pass語句。
例如
def do_nothing() pass
pass起的是佔位符的作用。如果這個函數具體內容不需要定義就可以使用pass。
參數檢查
前一篇文章介紹過內建函數會對傳入的參數的個數和資料類型進行檢查。那麼對於自訂函數,python是怎麼處理的呢?
我們定義一個函數
def my_function(x,y): return x*y
呼叫:my_function(1,2,3)
報錯:
Traceback (most recent call last): File "/Users/W/Code/Python/LearnPython/DataType.py", line 4, in <module> my_function(1,2,3) TypeError: my_function() takes exactly 2 arguments (3 given)
呼叫:my_function(1,"abc")
報錯:不回傳錯誤訊息。事實上我們希望my_function傳入的兩個參數應該是整數活著浮點數才對。
為函數新增參數檢查
我們對my_function作一些改寫。
def my_function(x, y): if not (isinstance((x,y),(int,float)) and isinstance(y,(int,float))): raise TypeError('Bad operand type') return x*y
此時呼叫my_function函數時傳入錯誤的參數則會拋出TypeError。
函數傳回多個值
Python支援傳回多個值。 Python其實是透過回傳一個tuple來實現的。我們可以用簡單的demo驗證:
def func(): return 2, 3 print func()
則會輸出(2,3)這麼一個tuple。
在語法上,傳回一個tuple可以省略括號,即多個變數可以同時接收一個tuple,依位置賦給對應的值。例如
x,y = func()。