[Python] Lambda Function
Python에서도 C++과 동일하게 lambda function을 제공한다. Lambda function은 쉽게 말해서 이름없는 함수다.
[function name] = lambda [argument] : [return]사용법은 위와 같다. 예를 들면 다음과 같이 사용 가능하다.
add = lambda x, y : x + y print(add(3, 5))
8 |
실제로 lambda function을 사용한 예를 보여주면 다음과 같다.
a = [(1, 2), (4, 1), (9, 10),(13, -3)] a.sort(key=lambda x: x[1]) print(a)
[(13, -3), (4, 1), (1, 2), (9, 10)] |
해당 lambda의 argument는 list의 각 element인 tuple이 x가 된다. 그리고 return 값은 tuple의 1번째 값이 되며, 해당 값을 기준으로 정렬을 수행한다. 따라서 결과는 각 tuple의 두 번째 값을 기준으로 정렬된 list가 나온다.
일반적으로 lambda function은 함수를 재사용하지 않으려고 사용한다.
Lambda Default Parameter
Lambda function도 일반 함수와 마찬가지로 default parameter를 정의할 수 있다.
x = 10 a = lambda y, x=x : x + y x = 20 b = lambda y, x=x : x + y print(a(10)) print(b(10))
20 30 |
위 코드의 경우 처음 a() 함수와 b() 함수가 정의될 때 default parameter가 결정되는데 x=x
매크로를 통해 결정된다. 참고로 lvalue의 x는 default parameter, rvalue는 새로운 값이다.
위 a()
함수는 x는 10, b()
함수의 x는 20으로 결정된다.
List Comprehension
Python에서 list 내부에서 for statement를 통해 값을 assign 할 수 있다.
funcs = [lambda x: x+n for n in range(5)] for f in funcs: print(f(0), end=' ')
4 4 4 4 4 |
위 함수 list funcs()를 설명하자면, 각 함수는 argument 값에다 n을 더하는 동작을 한다. 그래서 해당 함수 list를 for statement를 통해 사용될 경우 우리는 0, 1, 2, 3, 4를 기대하겠지만 실제 결과는 4, 4, 4, 4, 4가 나온다.
이유는 range(5)의 마지막 값인 4가 list의 모든 element에 항상 출력되기 때문이다.
우리가 원하는 출력 값인 0, 1, 2, 3, 4가 되기 위해선 default parameter 값을 설정해줘야한다.
funcs = [lambda x, n=n: x+n for n in range(5)] for f in funcs: print(f(0), end=' ')
0 1 2 3 4 |
다음과 같이 n=n 을 통해 default parameter 를 설정해주면 우리가 기대하던 값이 나온다.