함수로 입력 함수를 지정하고 값을 세 배로하는 함수를 반환하려면 어떻게해야합니까? 다음은 내가 찾고있는 의사 코드입니다. 파이썬이나 스칼라의 구체적인 예가 인정 될 것이다.입력 함수의 값을 수정하는 리턴 함수
def f(int x):
return x ** 2
def tipleFunc(Function g)
return 3 * g
Function newFunc = tripleFunc(f)
print newFunc(5)
함수로 입력 함수를 지정하고 값을 세 배로하는 함수를 반환하려면 어떻게해야합니까? 다음은 내가 찾고있는 의사 코드입니다. 파이썬이나 스칼라의 구체적인 예가 인정 될 것이다.입력 함수의 값을 수정하는 리턴 함수
def f(int x):
return x ** 2
def tipleFunc(Function g)
return 3 * g
Function newFunc = tripleFunc(f)
print newFunc(5)
def f(x):
return x ** 2
def tripleFunc(g):
return lambda *args: 3 * g(*args)
newFunc = tripleFunc(f)
print newFunc(5)
스칼라에서
x를 전달하는 함수를 반환 할 수있는 방법이 있습니까? 아니면 함수와 필요한 인수를 전달해야합니까? –
내 업데이트를 참조하십시오. – uselpa
:
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
당신은이 작업을 수행 할 파이썬 @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 = multiplier(3)
>>> @triple_func
def f(x):
"""Return x squared."""
return x ** 2
>>> f(5)
75
을 예컨대을 triple_func
장식을 만들거나 심지어 모든 장식 구문없이 적용 할 수 있습니다
>>> def f(x):
"""Return x squared."""
return x ** 2
>>> new_func = triple_func(f) # or 'new_func = multiplier(3)(f)'
>>> new_func(5)
75
IMO, 파이썬 *해야 * 같은 지원 뭔가. '__mul__'은 함수 ATM에 대해 전혀 정의되지 않았으며, 실제로 또 다른 명백한 해석은 없습니다. – chepner