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 받을 값(기능)
'학습 > python' 카테고리의 다른 글
나머지 // , int.__floordiv__ (0) | 2023.09.13 |
---|---|
lambda(람다) -2, def 함수 문법과 lambda 문법의 차이 (0) | 2023.05.22 |
map() -1 map동작 원리, 그냥 list 안에 for 문 쓰면 안됨?? (0) | 2023.05.22 |
python) import ?, __init__ ?, form .lib 의 '.' ? (0) | 2023.04.26 |
(python) 리스트 컴프리헨션(List Comprehension) (0) | 2023.04.24 |