如何将带有某些(但不是全部)参数的函数传递给另一个函数?

时间:2019-04-04 17:20:19

标签: python function arguments

我有这个函数f(x,a,b):

def f(x, a, b):
    return a*x + b

并且我必须将此函数传递给预设有'a'和'b'的另一个函数,例如:

def print2(f):
    x = np.linspace(0,1,10)
    print(f(x))

print2(f( , 1, 1))

我知道还有其他方法可以解决此特定问题,但这仅是示例,而不是真正的问题,我想知道是否还有某种方法可以做这样的事情“ print2(f(,1 ,1))”。换句话说,是否有必要这样做而不必完全传递参数?喜欢,

def print3(f, a, b):
    x = np.linspace(0, 1, 10)
    print(f(x, a, b))
print3(f, a, b)

3 个答案:

答案 0 :(得分:2)

您可以完全使用 functools.partial

def print2(f):
    x = np.linspace(0,1,10)
    print(f(x))
f2 = functools.partial(f, a=1, b=2)
print2(f2)

有关通过使用partial获得的许多可能的优势,请参见this

简而言之:

还有更多...

答案 1 :(得分:1)

您可以将其包装在另一个函数中

g = lambda x: f(x, 1, 1)

print2(g)

使外部函数的参数仍然需要提供任何数据,然后将该数据传递通过。


有人告诉我,这种方法在Python中并不理想。 @Bharel的答案可能更合适。

答案 2 :(得分:0)

lambdapartial都是创建新函数的理想方法。您也可以自己编写:

def f2(x):
    return f(x, 1, 1)

lambdapartial的独特之处在于它们是表达式,可以作为参数直接传递给高阶函数。