如何将一些(但不是全部)参数的函数传递给另一个函数? [重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

我有这个函数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)
python function arguments
3个回答
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
投票

你可以把它包装在另一个函数中:

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

print2(g)

无论需要提供什么数据,都要创建外部函数的参数,然后传递数据。


我被告知这种方法在Python中并不理想。 @Bharel的回答可能更合适。


0
投票

lambdapartial都是创造新功能的奇特方式。你也可以自己写一下:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.