自定函式
四種函式
- 全域
- 區域 , 也就是定義在函式裡面的函式
- lambda , 也就是運算式 , 格式是 lambda parameters: expression
- 方法 , 也就是與特定資料型態相關的函式
回傳值
- 預設回傳值是 None .
- 回傳值可以是單值 , 也可以是多值的元組 (tuple)
參數與引數
- 選擇性引數 vs. 必要性引數 , 以參數是否有預設值來區分
- 位置性引數 vs. 關鍵字引數 , 以呼叫函式時是否使用參數名稱來區分
- 固定數目引數 vs. 不固定數目引數 , 以參數是否有前綴符號
*
或**
來區分 *
本身也可以做為一個參數 , 意思是之後不可以有位置性引數 , 但可以有關鍵字引數 , 所以當*
做為第一個參數時可以防止呼叫者使用任何位置引數 .
函式一
def func_name():
def_suite
範例一
def func():
pass
x = func() # x = None
範例二
def func():
return 1,2
x = func() # x = (1,2)
x,y = func() # x = 1, y = 2
x,y,z = func() # TypeError
函式二
def func_name(x):
def_suite
範例
def func(x):
print(x)
func() # TypeError
func(1) # x = 1 , 呼叫時採用位置性參數
func(1,2) # TypeError
func(x=1) # x = 1 , 呼叫時採用關鍵字參數
函式三
def func_name(*x):
def_suite
範例
def func(*x):
print(x)
func() # x = ()
func(1) # x = (1,)
func(1,2) # x = (1, 2)
func(x=1) # TypeError
函式四
def func_name(**x):
def_suite
範例
def func(**x):
print(x)
func() # x = {}
func(1) # TypeError
func(x=1) # x = {'x':1}
func(x=1,y=2) # x = {'x':1, 'y':2}
函式五
def func(x=default):
def_suite
範例一
def func(x=0):
print(x)
func() # x = 0
func(1) # x = 1
func(x=1) # x = 1
範例二 (對照範例三一起看)
def func(x=[]):
print(x)
func() # [] , 這個空清單物件是在函式建立時產生的
範例三 (對照範例二一起看)
def func(x=None):
if x is None:
x = []
print(x)
func() # [] , 這個空清單物件是在函式被呼叫時產生的
函式六
def func(x, *, y)
def_suite
範例
def func(x, *, y)
print(x,y)
func(1,2) # TypeError
func(1, y=2) # 1 2
func(x=1, y=2) # 1 2
func(x=1, 2) # SyntaxError
其他
範例
def func_name():
print(1)
x = func_name
x() # 1