[英]Python 3.x - Simple function that returns another function
我最近剛開始使用Python進行編程,我一直在嘗試創建一個簡單的函數,該函數帶有兩個參數a和b,並返回a和| b |的和的結果。 我想返回f(a,b)而不僅僅是f。 我知道我在當前代碼中將f分配為int,因此在運行時它會返回“ int not callable error”。 因此,我必須將f分配為某種函數。 我敢肯定,我在這里遺漏了一些基本知識,只是不確定到底是什么。 謝謝你的幫助!
from operator import add, sub
def a_plus_abs_b(a, b):
"""Return a+abs(b), but without calling abs.
>>> a_plus_abs_b(2, 3)
5
>>> a_plus_abs_b(2, -3)
5
"""
if b < 0:
f = sub(a, b)
else:
f = add(a, b)
return f(a, b)
f = sub(a, b)
不會創建函數,它不會計算結果,因此,當您調用f(a, b)
您正在調用整數。
要修復此問題,請為函數內聯三元數,以根據b
的符號選擇要創建的函數
f = sub if b < 0 else add
Jean-Fançois的答案很好,但是如果您不了解其背后的基本原理,則應查看另一個使用lambda的示例:
def returns_function_example():
return lambda arg1: arg1 + 2
function_returned = returns_function_example()
print(function_returned(1))
# Output = 3
在調試器中運行此命令,以查看確實存在功能的“ function_returned”。 您可以在調用“打印”功能后連接點。
函數是Pythonland中的一等公民,因此您可以像其他任何對象一樣操作它們。
假設您創建了函數:
def add(a, b): return a + b
如果編寫add
,那就是一個函數。 但是,如果您假設定義了a和b來編寫add(2,4)
或add(a, b)
,則您正在調用該函數,因此會得到結果。 這是兩個完全不同的東西:有f
,一個callable和f(a,b)
返回一個值。
因此,如果您寫:
>>> f = add
>>> type(f)
<class 'function'>
那就是您想要的,現在您有了一個功能完全add
執行add
功能(您可以說它實際上是 add)。
相反,如果您寫:
>>> f = add(a,b)
>>> type(f)
<class 'int'>
>>> f
11
那是一個價值。
因此,總而言之:
from operator import add, sub
def a_plus_abs_b(a, b):
"""
Return a+abs(b), but without calling abs.
>>> a_plus_abs_b(2, 3)
5
>>> a_plus_abs_b(2, -3)
5
"""
if b < 0:
f = sub
else:
f = add
return f(a, b)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.