簡體   English   中英

Python:如何將帶有兩個參數的函數作為參數傳遞

[英]Python: How to pass function with two parameters as an argument

我有個問題:

我需要在 python 中實現一個函數,它打印一個參數的 skalar 倍數 - 參數是一個函數本身,它具有以下簽名:

def innerF(a,b):
    return x

skalar 乘數是函數內的常數 - 例如

return 55 * x

現在是我似乎沒有得到的部分:調用 Sytanx 必須是:

print( outerF(innerF)(a,b))

所以總結一下

def innerF(a,b):
    return a + b

def outerF( #What goes here? ):
    return 55* #How two call the innerF?

print(outerF(innerF)(a,b))

到目前為止我所知道的:

  • 我可以將innerF和a,b作為單獨的參數傳遞給outerF,例如

    def outerF(innerF,a,b): 返回 53*innerF(a,b)

我沒有得到的:

我完全不知道帶有innerF(outerF)(a,b)的outerF 調用的簽名。 我也找不到參考。

非常感謝您提前!

outerF需要返回一個被(a, b)調用的函數

def innerF(a, b):
    return a + b


def outerF(func):
    # define a function to return
    def f(*args, **kwargs):
        # this just calls the given func & scales it
        return 55 * func(*args, **kwargs)

    return f


print(outerF(innerF)(1, 2))

結果:

165  # 55 * (1+2)

所以你需要的是嵌套函數。

outerF(innerF)(a, b)

意味着outerF(innerF)返回一個新函數,然后將ab作為參數。

為此,您需要一個返回函數的函數。

def inner(a, b):
    return a + b

def outer(func):
    def wrapper(a, b):
        55 * func(a, b)
    return wrapper

outer(inner)(2, 3) # 275

您還可以將外部函數用作裝飾器。

@outer
def inner(a, b):
    return a + b
    
inner(2, 3) # 275

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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