自定函式

四種函式

  • 全域
  • 區域 , 也就是定義在函式裡面的函式
  • 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

results matching ""

    No results matching ""