5

我应该如何通过修复它的参数来制作比原始函数更小的函数:

例如,我想用 sum 函数制作后继函数,如下所示:

def add(x, y):
    return x + y

现在我正在寻找这样的东西:

g = f(~, 1)这将是后继功能,即g(x) = x+1.

4

2 回答 2

15

您可以编写自己的函数:

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
于 2013-06-18T00:53:08.327 回答
2

如果你做的不止一点,那么你可以使用装饰器之类的东西。

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

name = parameter如果您关心__name__结果函数的 ,请使用。如果需要,您可能会更喜欢使用该__inspect__模块对封闭的功能内部进行其他黑客攻击。但是后来你重写了前面提到的functools部分内容,只是为了避免必须给出关键字参数。

于 2014-05-29T01:44:54.163 回答