Python 函式如何返回一個函式?
Python 支援一等函式。事實上,所有Python 中的函式都是一等函式。Python 可以從函式中返回函式,將函式儲存在諸如列表之類的集合中,並且通常像對待任何變數或物件一樣對待它們。Python 中的函式可以返回函式,因為函式被視為一等物件。這意味著您可以將函式賦值給變數,將其作為引數傳遞給另一個函式,或在函式中將其用作返回值。在其他函式中定義函式並返回函式都是可能的。
在此程式碼中,外部函式定義並返回內部函式。然後,您可以呼叫外部函式並將它的返回值賦給一個變數。
現在,f 是對內部函式的引用。您可以像呼叫任何其他函式一樣呼叫它。
示例
def outer(): def inner(): print("Hello from inner!") return inner f = outer() f()
輸出
Hello from inner!
使用帶返回值的函式的引數
您可以透過不同的方式使用帶返回值的函式的引數。一種方法是將引數傳遞給外部函式,並在內部函式中使用它們。
在此程式碼中,外部函式接收引數 x 並返回一個列印其值的函式。您可以像這樣呼叫它:
示例
def outer(x): def inner(): print("x is", x) return inner f = outer(10) f()
輸出
x is 10
另一種方法是在呼叫內部函式時向其傳遞引數。
在此程式碼中,外部函式返回一個接收引數 y 並列印其值的函式。您可以像這樣呼叫它:
示例
def outer(): def inner(y): print("y is", y) return inner f = outer() f(20)
輸出
y is 20
高階函式
在 Python 中,函式可以返回另一個函式作為其結果。這被稱為“高階函式”。
示例
def adder(x): def inner(y): return x + y return inner
在此示例中,我們定義了一個名為 adder 的函式,它接收單個引數 x。在 adder 內部,我們定義了另一個名為 inner 的函式,它接收單個引數 y 並返回 x 和 y 的和。
adder 沒有直接返回總和,而是返回 inner 函式本身。這意味著,例如,當我們呼叫adder(1) 時,我們將得到一個新的函式,該函式將其引數加 1。
在 Python 中從函式返回函式
要在 Python 中從函式返回函式,您可以在第一個函式內定義一個新函式,然後返回它。此技術稱為巢狀函式或閉包。然後,返回的函式可以賦值給變數並在以後呼叫。
示例
def adder(x): def inner(y): return x + y return inner add_one = adder(1) print(add_one(5)) # prints 6
輸出
6
在此示例中,adder 是一個接收引數 x 並返回一個新函式 inner 的函式。inner 函式接收引數 y 並返回 x 和 y 的和。當我們呼叫adder(1) 時,它返回一個新的函式物件 inner,其中 x 設定為 1。然後,我們可以將此新函式物件賦值給變數 add_one 並使用引數 5 呼叫它,這將產生輸出 6。
總的來說,這種模式可用於編寫更靈活和可重用的程式碼,尤其是在與閉包和柯里化等其他高階程式設計概念結合使用時。
示例
def create_multiplier(factor): def multiplier(number): return number * factor return multiplier double = create_multiplier(2) triple = create_multiplier(3) print(double(5)) # Output: 10 print(triple(5)) # Output: 15
輸出
10 15
在此示例中,create_multiplier() 是一個接收 factor 引數並返回一個新函式 multiplier() 的函式。multiplier 函式接收一個 number 引數並返回 number 與 factor 相乘的結果。我們透過使用不同的 factor 呼叫 create_multiplier() 來建立兩個新函式 double 和 triple。然後,我們可以使用不同的數字呼叫這些函式以獲得所需的輸出。
必須注意的是,當我們呼叫 create_multiplier() 時,它每次都會返回一個新的函式物件。這意味著 double 和 triple 是不同的函式,即使它們是使用相同的 create_multiplier() 函式建立的。
在 Python 中從函式返回函式
從 Python 函式返回函式可以成為建立靈活且可重用程式碼的強大工具。透過返回函式,我們可以抽象化函式工作方式的細節,併為使用者提供更高級別的介面。在本文中,我們將探討如何使用巢狀函式或 lambda 函式從 Python 函式返回函式。
示例:巢狀函式
def adder(x): def inner(y): return x + y return inner add_one = adder(1) print(add_one(5)) # prints 6
輸出
6
在此示例中,adder 是一個接收引數 x 並返回一個新函式 inner 的函式。inner 函式接收引數 y 並返回 x 和 y 的和。當我們呼叫 adder(1) 時,它返回一個新的函式物件 inner,其中 x 設定為 1。然後我們將此新函式賦值給變數 add_one。當我們呼叫 add_one(5) 時,它等效於呼叫 inner(5),其中 x 設定為 1。
總的來說,這種模式可用於編寫更靈活和可重用的程式碼,尤其是在與閉包和柯里化等其他高階程式設計概念結合使用時。
這是另一個在 Python 中返回函式的函式示例,但這次使用 lambda 函式。
示例:Lambda 函式
def make_incrementor(n): return lambda x: x + n increment_by_five = make_incrementor(5) increment_by_ten = make_incrementor(10) print(increment_by_five(3)) # Output: 8 print(increment_by_ten(3)) # Output: 13
輸出
8 13
在此示例中,make_incrementor() 是一個接收引數 n 並返回一個 lambda 函式的函式,該 lambda 函式接收引數 x 並返回 x 和 n 的和。當我們呼叫 make_incrementor(5) 時,它返回一個新的 lambda 函式物件,該物件將其引數加 5。然後我們將此新函式賦值給變數 increment_by_five()。當我們呼叫 increment_by_five(3) 時,它等效於呼叫 (lambda x: x + 5)(3)。
透過從函式返回函式,我們可以在 Python 中建立更靈活和可重用的程式碼。無論您使用巢狀函式還是 lambda 函式,將函式作為值返回的能力都是您程式設計工具庫中的一項強大工具。
總而言之,可以使用巢狀函式或 lambda 函式從 Python 函式返回函式,這使我們可以建立更靈活和可重用的程式碼。透過返回函式,我們可以抽象化函式工作方式的細節,併為使用者提供更高級別的介面。