Python 通过固定参数来限制函数
我应该如何通过修正一个函数来生成比原始函数维数更小的函数 它的论点: 例如,我想用sum函数生成后续函数,如下所示:Python 通过固定参数来限制函数,python,function,parameter-passing,bayesian-networks,belief-propagation,Python,Function,Parameter Passing,Bayesian Networks,Belief Propagation,我应该如何通过修正一个函数来生成比原始函数维数更小的函数 它的论点: 例如,我想用sum函数生成后续函数,如下所示: def add(x,y): return x+y 现在我正在寻找这样的东西: g=f(~,1)哪个将是后续函数,即g(x)=x+1您可以编写自己的函数: def g(y): return f(2, y) 或者更简洁地说: g = lambda y: f(2, y) 还有functools.partial: import functools def f(x,
def add(x,y):
return x+y
现在我正在寻找这样的东西:
g=f(~,1)
哪个将是后续函数,即g(x)=x+1
您可以编写自己的函数:
def g(y):
return f(2, y)
或者更简洁地说:
g = lambda y: f(2, y)
还有functools.partial
:
import functools
def f(x, y):
return x + y
g = functools.partial(f, 2)
然后,您可以像以前一样调用它:
>>> g(3)
5
如果你做的不止一点,那么你可以使用像装饰师这样的东西
def with_x(x, fn, name=None):
def foo(*args, **kwargs):
return fn(x, *args, **kwargs)
if name:
foo.__name__ = name
return foo
def example(x,y):
return x**y
g = with_x(2, example)
g(3) #8
如果您关心结果函数的\uu name\uuu
,请使用name=parameter
。如果需要,您可以使用\uuuu inspect\uuuu
模块,通过其他黑客入侵封闭的函数内部。但是,您重新编写了前面提到的functools
部分内容,以避免必须给出关键字参数 def g(x):返回add(x,1)-这种方法有问题吗?