如何创建一个函数作为输入并返回一个值为三倍的函数。这是我正在寻找的一些伪代码。 Python或Scala中的具体示例将不胜感激。
def f(int x):
return x ** 2
def tipleFunc(Function g)
return 3 * g
Function newFunc = tripleFunc(f)
print newFunc(5)
答案 0 :(得分:3)
def f(x):
return x ** 2
def tripleFunc(g):
return lambda *args: 3 * g(*args)
newFunc = tripleFunc(f)
print newFunc(5)
答案 1 :(得分:2)
在Scala中:
def foo(x: Int) = x * x
def quadruple(f: Int => Int) = (x: Int) => 4 * f(x)
val quadfoo = quadruple(foo)
scala> quadfoo(3)
res0: Int = 36
答案 2 :(得分:0)
您可以使用Python @decorator
语法来执行此操作; @decorator
等同于分配somefunc = decorator(somefunc)
,允许应用任意包装函数:
>>> from functools import wraps
>>> def multiplier(n):
"""Create a decorator to multiply a wrapped function's output by n."""
def wrapper(f):
@wraps(f) # retain the wrapped function's docstring
def func(*args, **kwargs):
return n * f(*args, **kwargs)
return func
return wrapper
>>> @multiplier(3) # apply a multiplier of 3 to the outputs of f
def f(x):
"""Return x squared."""
return x ** 2
>>> f(5)
75
注意*args, **kwargs
语法来处理任意参数(分别是位置和关键字)。您也可以直接创建triple_func
装饰器,例如:
>>> triple_func = multiplier(3)
>>> @triple_func
def f(x):
"""Return x squared."""
return x ** 2
>>> f(5)
75
甚至可以在没有装饰器语法的情况下应用它:
>>> def f(x):
"""Return x squared."""
return x ** 2
>>> new_func = triple_func(f) # or 'new_func = multiplier(3)(f)'
>>> new_func(5)
75