一般意義上,函數是編程語言中的結構化元素,用於對語句進行分組,這樣便可以在程序中多次使用。倘若沒有函數,實現這一目標的唯一方法是:通過復制代碼,並將其改編為不同的上下文來重用。
使用函數,有很多好處:
尤其是隨著程序越來越大,函數的作用會更加顯著,不僅讓程序更有條理,而且更便於管理。
| 版權聲明:一去、二三裡,未經博主允許不得轉載。
在 Python 中,函數由 def
語句定義,一般的語法格式如下所示:
def function_name(parameters):
"""docstring"""
以上函數定義,由以下部分組成:
def
:標志著函數頭的開始function_name
):唯一標識一個函數,函數命名遵循標識符的編寫規則。parameters
):通過它可以將值傳遞給函數,是可選的。:
):用於標記函數頭的結尾。return
語句:用於從函數返回一個值,可選的。例如,定義一個函數,用於計算數字的平方:
>>> def square(x):
... return x**2
...
一旦函數被定義,便可以從另一個程序、函數、甚至是 Python shell 中調用它。
要調用函數,只需鍵入函數名稱,以及適當的參數。
>>> square(3)
9
>>>
>>> square(6)
36
函數頭後的第一個字符串稱為 docstring(文檔字符串 - documentation string 的縮寫),用於簡單地解釋函數的功能,可以使用 function_name.__doc__
來訪問。
>>> def square(x):
... """return square of given number"""
... return x**2
...
>>>
>>> print(square.__doc__)
return
PS: docstring 是接口設計的重要部分,雖然是可選的,但應盡量養成使用它的習慣。
return 語句用於退出函數,並將結果(即:return 關鍵字之後的表達式的值)返回給調用者。
如果函數中沒有 return 語句,則當控制流到達函數體的末尾時,函數結束。
語法格式:
return
在上述示例中,函數 square() 使用了一個 return 語句。調用該函數,return 之後的表達式的值將被返回。
>>> val = square(3)
>>> val
9
但是,如果沒有明確地給出 return 語句,那麼將返回什麼?讓我們來看看:
>>> def square(x):
... y = x**2
...
>>>
>>> val = square(3)
>>> print(val)
None
調用函數,將打印 None,即無 return 語句的函數返回特殊值 None。
如果函數只有一個 return,而沒有表達式,那麼也將返回 None:
>>> def square(x):
... y = x**2
... return
...
>>> val = square(3)
>>> print(val)
None
一個函數只能返回一個值,或者更應該說是一個對象。對象可以是一個數值(整數或浮點數),也可以是列表或字典。所以,如果要返回 2 個整數值,可以返回一個列表或一個包含這 2 個整數值的元組。這意味著,可以間接返回多個值。
例如,計算一個序列的最大值和最小值:
>>> def max_min(seq):
... max_val = max(seq)
... min_val = min(seq)
... return max_val, min_val
...
返回值通過拆包立即存儲到變量 max_val 和 min_val 中:
>>> l = [1, 3, 5, 7, 9]
>>> max_val, min_val = max_min(l)
>>> max_val
9
>>>
>>> min_val
1
返回多個值只不過是一種假象,函數返回的仍然是單一值:
>>> val = max_min(l)
>>> val
(9, 1)
沒錯,就是 tuple!在語法上,返回一個 tuple 可以省略括號,並可以同時由多個變量接收,按位置賦予相應的值。
所以,Python 的函數返回多個值其實就是返回一個 tuple,只不過寫起來更方便而已。