lambda expressions (람다 표현식)
lambda x : x+1
lambda parameter : 코드
이런 형태의 표현식이다. 함수와 동일한구조지만 차이점은 명확하다.
- 람다는 이름이없다.
- 람다는 한줄의 인라인형태이다.
- 표현식 내부에서 변수를 만들 수 없다.
그렇다면 왜 사용할까?!
함수를 사용해야하지만 복잡한구조를 지니지 않을때 인라인으로 활용하여 코드의 수를 줄일 수 있다.
lambda 와 함수의 구조 비교해보기
함수
def 함수이름(parameter):
코드
return 반환값
람다식
lambda parameter : 코드
return 이 없으며 함수 이름이 없다 실전예제를 들어보자
함수
def plus(a,b):
a = (a+b)*10
return a
람다식
lambda a,b : (a+b)*10
인라인형식으로 훨씬 깔끔하게 되었다. 이걸 좀더 유용하게 어떻게 쓸까?!
map과 함께 사용해보기
list(map(lambda a:a*10 , [2,3,4]))
#결과
[20,30,40]
물론 이경우에는 리스트 표현식이 더 유용하다.
같이 사용할만한 함수들
- map
- filter
- reduce(모듈로 import 해와야한다)
람다에서 if문 사용하기
람다에서 if문 반복문 다 사용이 가능하다.
if문은 특이한점이 있다.
- elif의 사용이 불가능하다.
- else가 생략이 안된다.
def check_password(password):
if len(password) < 8:
return 'SHORT_PASSWORD'
if not any(c.isupper() for c in password):
return 'NO_CAPITAL_LETTER_PASSWORD'
return True
위와같은 코드를 lambda로 작성해보자.
lambda parameter: 식1 if 조건식1 else 식2 if 조건식2 else 식3
lambda password : 'SHORT_PASSWORD' if len(password) < 8 else 'NO_CAPITAL_LETTER_PASSWORD' if not any([c.isupper() for c in password]) else True
무지막지한 식이 나왔다. 이렇게 if를 중첩시키려면 함수를 사용하자.
list Comprehensions (리스트표현식)
리스트표현식은 너무 단순하다.
a = []
for i in range(5):
a.append(i)
리스트표현식
[i for i in range(5)]
#결과
[0,1,2,3,4]
이런식이며 아래와 같이 사용도 가능하다.
[i*10 for i in range(5)]
#결과
[0,10,20,30,40]
바깥쪽을 감싸주는게 '()' 이면 튜플이고 '{}'면 세트가 된다.
딕셔너리 표현식
{i:j for i,j in enumerate(range(5))}
# enumerate()함수는 인덱스와 value 2개를 가져오는 함수이다.
{0:0 , 1:1 , 2:2 , 3:3 , 4:4}
값1 : 값2 를 기억하자 값1 = 값2 로사용해서 에러가 많이 나는걸 보았다.
정말 Django를 쓰면서 리스트표현식과 딕셔너리표현식은 엄청나게 많이 사용한것 같다.
'Python > 기초문법' 카테고리의 다른 글
[Python] Python datetime aware & naive 객체 (0) | 2023.01.05 |
---|---|
Package & Module (0) | 2022.05.29 |
function parameter 순서 (with arguments 처리 순서) (0) | 2022.05.29 |
Set vs Dictionary & List vs Tuple (0) | 2022.05.26 |
2달 공부하고 다시쓰는 파이썬 기본 문법 (0) | 2022.05.25 |