다음은 멀티 라인 람다의보다 흥미로운 구현입니다. 파이썬이 코드를 구조화하는 방법으로 들여 쓰기를 사용하는 방식으로 인해 달성 할 수 없습니다.
그러나 운 좋게도 배열과 괄호를 사용하여 들여 쓰기 서식을 비활성화 할 수 있습니다.
이미 지적했듯이 다음과 같이 코드를 작성할 수 있습니다.
lambda args: (expr1, expr2,... exprN)
이론적으로 왼쪽에서 오른쪽으로 평가가 보장된다면 효과가 있지만 한 표현식에서 다른 표현식으로 전달되는 값은 여전히 잃어 버립니다.
좀 더 장황한 것을 달성하는 한 가지 방법은
lambda args: [lambda1, lambda2, ..., lambdaN]
각 람다는 이전 항목에서 인수를 수신합니다.
def let(*funcs):
def wrap(args):
result = args
for func in funcs:
if not isinstance(result, tuple):
result = (result,)
result = func(*result)
return result
return wrap
이 방법을 사용하면 약간 lisp / scheme 같은 것을 작성할 수 있습니다.
따라서 다음과 같이 쓸 수 있습니다.
let(lambda x, y: x+y)((1, 2))
더 복잡한 방법은 빗변을 계산하는 데 사용할 수 있습니다
lst = [(1,2), (2,3)]
result = map(let(
lambda x, y: (x**2, y**2),
lambda x, y: (x + y) ** (1/2)
), lst)
이렇게하면 스칼라 숫자 목록이 반환되므로 여러 값을 하나로 줄일 수 있습니다.
많은 람다를 갖는 것이 확실히 효율적이지는 않지만 구속 된 경우 무언가를 빨리 끝내고 나중에 실제 함수로 다시 쓰는 좋은 방법이 될 수 있습니다.