簡體   English   中英

Python 3.x-返回另一個函數的簡單函數

[英]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 ,一個callablef(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM