1. 調用函數時,函數名其實就是指向一個函數對象的引用,完全可以把函數名賦給一個變數,相當於給這個函數起了一個“別名”
>>> a = abs # 變數a指向abs函數
>>> a(-1) # 所以也可以通過a調用abs函數
1
2. 定義函數:使用def語句,依次寫出函數名、括弧、括弧中的參數和冒號: ,然後,在縮排塊中編寫函數體,函數的傳回值用return 語句返回。
求絕對值的例子:
def my_abs(x):
if x >= 0:
return x
else:
return -x
3. 空函數
如果想定義一個什麼事也不做的空函數,可以用pass 語句:
def nop():
pass
pass 語句什麼都不做,那有什麼用?實際上pass 可以用來作為預留位置,比如現在還沒想好怎麼寫函數的代碼,就可以先放一個pass ,讓代碼能運行起來。
pass 還可以用在其他語句裡,比如:
if age >= 18:
pass
缺少了pass ,代碼運行就會有語法錯誤。
4. 定義函數時參數檢查
資料類型檢查可以用內建函數isinstance() 實現.
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
5. 在文法上,返回一個tuple可以省略括弧,而多個變數可以同時接收一個tuple,按位置賦給對應的值,所以,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。
例子:
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632 70.0
>>> r = move(100, 100, 60, math.pi / 6)
>>> print(r)
(151.96152422706632, 70.0)
6. 函數執行完畢也沒有return 語句時,自動return None 。
7. 定義預設參數要牢記一點:預設參數必須指向不變對象!在編寫程式時,如果可以設計一個不變對象,那就盡量設計成不變對象。