lambda(람다) -1, lambda의 정의, 제작의도

2023. 5. 22. 00:37학습/python

파이썬에서 : 으로 끝나는 문법들이 몇가지가 있다.

if, for, while, def ...

 

lambda 는 def 에 관련된 문법이다.

 

람다함수는 익명함수 라고 하는데...

그럼 이름을 밝히는 함수는 뭐임?

-> 바로 def 

 

 

파이썬에서 함수는 객체화시킬 수 있다.
=
함수를 변수처럼 사용할수 있다.

 

def add(x, y):
    return x + y

result = add(3, 4)
print(result) # 결과는 7

이 add 라고 정의한 함수를

a = add

a 라는 변수에 할당할수 있다.

a(5,6) #출력값 11

 

 

함수를 객체화해서 얻는 장점 여러가지가 있는데

더보기

1. 코드의 재사용성이 향상됩니다: 함수를 객체처럼 취급하면 변수에 할당할 수 있고, 다른 함수의 인수로 전달하거나 반환 값으로 사용할 수 있습니다. 이런 방식으로 함수를 재사용하고 코드 중복을 줄일 수 있습니다.

2. 고차 함수를 사용할 수 있습니다: 고차 함수란 다른 함수를 인수로 받거나 결과로 반환하는 함수를 말합니다. 함수를 객체화하면 고차 함수를 구현할 수 있어 더 간결하고 일반화된 코드를 작성할 수 있습니다.

3. 코드 구조와 가독성이 향상됩니다: 함수를 객체화하면 라이브러리나 모듈로 코드를 쉽게 분리하거나 필요한 곳에 함수를 전달할 수 있습니다. 이를 통해 코드의 가독성과 구조가 개선되어 유지 보수가 용이해집니다.

4. 함수형 프로그래밍을 지원합니다: 함수를 객체화하면 함수형 프로그래밍 패러다임을 구현할 수 있습니다. 함수형 프로그래밍은 부작용 없이 높은 수준의 추상화를 지향하여 코드가 더 안정적이고 예측 가능하게 작동하도록 유도하며, 가독성과 유지 보수성이 향상됩니다.

5. 데코레이터 패턴을 사용할 수 있습니다: 함수를 객체화함으로써 데코레이터 패턴을 사용하여 코드 수정 없이 함수에 추가 기능을 적용할 수 있습니다. 데코레이터 패턴을 사용하면 코드의 가독성과 유지 보수가 더 쉬워집니다.

여기서 중요한것은 함수를 리스트에 넣어서 다룰수 수 있고, 다른 함수의 argument(인자)로 사용할수도 있다.

 

 

def print_ops(func, num1, num2):
    print(func(num1, num2))

def minus(a,b):
    return a-b
def plus(a,b):
    return a+b
    
print_ops(minus, 15, 2) # 13
print_ops(plus, 15, 2) # 17

이렇게 보면 간단하지만 좀 복잡한 구조의 함수들이면 코드가 길어지고 가독성이 떨어진다.

def 를 minus, plus 처럼 새로 정의하지 않고

print_ops(lambda a,b: a-b, 15, 2) # 13
print_ops(lambda a,b: a+b, 15, 2) # 17

lambda a,b: a-b  이런 기능의 함수를 argument로 바로 보내주겠다.

라는 의미가 된다.

 

다른 예시로

 

def power(x,y):
	return x**y

이런 함수를 정의하고,

a=2
b=3
power(a,b) # 8

a=2, b=3, 이런걸 치는데 작업상 낭비가 있어보인다.

power(2,3)

이런식으로 바로 함수에 집어넣을수 있기 때문에 작업상 낭비가 있어 보이는 것이다.

 

lambda람다도 이에 의해 탄생했다.

def 로 굳이 함수 이름을 지정하지 않고
'기능자체'를 argument에 집어 넣겠다가 lambda 문법의 제작의도이다.

 

 

 

람다의 구조는 이렇다.

lambda {argument 들}:  return 받을 값(기능)

 

728x90