小白學python系列-(9)函式

宋寶康發表於2018-04-14

定義函式

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

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

def get_abc(x):
    if x > 0:
        return x
    else:
        return -x
複製程式碼
print(str(get_abc(-100)))
複製程式碼
100
複製程式碼

請注意,函式體內部的語句在執行時,一旦執行到return時,函式就執行完畢,並將結果返回。因此,函式內部通過條件判斷和迴圈可以實現非常複雜的邏輯。

如果沒有return語句,函式執行完畢後也會返回結果,只是結果為Nonereturn None可以簡寫為return

空函式

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

def nop():
    pass
複製程式碼

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

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

if age >= 18:
    pass
複製程式碼

缺少了pass,程式碼執行就會有語法錯誤。

引數型別做檢查

對引數型別做檢查,只允許整數和浮點數型別的引數。資料型別檢查可以用內建函式isinstance()實現:

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x
複製程式碼

返回多個值

函式可以返回多個值嗎?答案是肯定的。

比如在遊戲中經常需要從一個點移動到另一個點,給出座標、位移和角度,就可以計算出新的新的座標:

import math


def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny


print(str(move(0, 0, 100, math.pi / 6)))

複製程式碼
(86.60254037844388, -49.99999999999999)
複製程式碼

import math語句表示匯入math包,並允許後續程式碼引用math包裡的sincos等函式。 小結
定義函式時,需要確定函式名和引數個數;

如果有必要,可以先對引數的資料型別做檢查;

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

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

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

相關文章