在 python 中定義函式,不僅僅只有 def
,還有其他種定義的方式,在這篇文章你會學到
- def
- lambda
函式 function
函式不僅用來呼叫,也可以作為一個變數供另外一個函式的參數所使用,比方說下面的例子
from typing import Callable
def foo():
print(‘My first function!’)
def call_foo(func: Callable) -> None:
func()
call_foo(foo) # My first function!
這邊雖然呼叫的是 call_foo,但實際上是呼叫所傳入的參數 foo 執行的結果。這種將函式組合在一起也被稱作 function composition。如果對於 JS 比較有經驗的人,應該能夠直接聯想到 callback function,不過這次先不深入討論這個名詞。
再來看一個例子
def outer_func():
def inner_func():
print(“I’m inner func”)
return inner\_func
function = outer_func
print(function) # <function outer_func at 0x105b3a5e0>
function() # I’m inner func
這段程式碼可以理解成:在 outer_func 內部又定義了一個 inner_func,並將 inner_func reference 回傳。因此在印出 function 時會看到的是它的 reference value,實際上要成功呼叫這個函式必須加上()
,才會印出 I’m inner func。
lambda
透過 lamdba,可以定義一個 anonymous function,並且讓定義函式上更加輕便,因為他的格式只要提供參數、邏輯
lambda <parameter_list>:
直接透過例子來讓大家了解
reverse_list_util = lambda lst: lst[::-1]
list1 = [1, 5, 8, 10]
print(reverse_list_util(list1)) # [10, 8, 5, 1]
這裡定義了一個 lambda function,並讓輸入的 list 反轉後輸出
當然 lambda 還可以與 map、filter 之類內建的函式結合,但是這篇文章不會去探討那些,主要是簡單介紹一下如何在 python 定義函式。