풀고 (부인 :하지 파이썬 아이, 그래서 부드러운 주시기 바랍니다가)기능 구성, 튜플 및
나는 다음과 같은 사용 기능을 구성하려고 :
에 대한 예상대로 작동def compose(*functions):
return functools.reduce(lambda acc, f: lambda x: acc(f(x)), functions, lambda x: x)
스칼라 기능. 튜플을 반환하는 함수와 여러 인수를 취하는 함수로 작업하고 싶습니다.
def dummy(name):
return (name, len(name), name.upper())
def transform(name, size, upper):
return (upper, -size, name)
# What I want to achieve using composition,
# ie. f = compose(transform, dummy)
transform(*dummy('Australia'))
=> ('AUSTRALIA', -9, 'Australia')
dummy
이후 반환 튜플과 transform
세 가지 인수를, 나는 값을 압축 해제해야합니다.
위의 compose
기능을 사용하면 어떻게하면됩니까? 내가 이렇게하려고하면, 내가 얻을 :
f = compose(transform, dummy)
f('Australia')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in <lambda>
File "<stdin>", line 2, in <lambda>
TypeError: transform() takes exactly 3 arguments (1 given)
필요한 곳이 압축 해제됩니다 compose
하도록 변경할 수있는 방법이 있나요?
당신이 당신의 예를 들어 _it'll 작업에 조금 정교하게 될까요 그냥 임의의 FUNCTION_을 처리하지 않습니다? 어떻게 다른 기능 구성을 가지고 있습니까? 수학적 관점에서 볼 때, 함수 구성은 바로 다음과 같습니다. 전통적으로 _ (g o f) (x) : = g (f (x)) _로 표시된지도의 구성. 그러므로, _g_의 서명은 _f_의 코 도로 마내에있는 요소이어야한다. 이것은 Haskell과 같은 형식화 된 언어에서 분명합니다. –
내가 말한 것은 키워드 args와 함께 작동하지 않으며 각 함수의 서명이 이전 값의 반환 값과 호환되어야한다는 것입니다. 나는 실제로 꽤 명백한 무언가를 말하고 있었다고 생각한다;) –
물론, 나는 _positional_ vs. _keywords_ args로 그 비트를 놓쳤다. 귀하의 제안은 스칼라 함수, 예를 들어 작동하지 않습니다. 'compose (operator.abs, operator.neg)'_TypeError : abs() 인수는 *이어야하며, int_가 아닌 시퀀스 여야합니다. 두 경우 모두 작동하는'compose' 함수를 만드는 방법이 있습니까? (그것은 나의 원래 질문의 감각이었다). –