파이썬엔 있는데 다른 언어에 없는 대표적인 기능 '튜플'과 '람다'에 대해 공부해보았다.
튜플은 리스트와 굉장히 비슷하지만 조금 다른 성질을 갖고 있다.

튜플
: 리스트와 매우 유사하지만 리스트와 다르게 결정된 요소를 바꿀 수 없다.
(데이터, 데이터, 데이터, ...)
tuple_test = (10, 20, 30)
print(tuple_test[0]) #출력결과 : 10
#튜플 값 바꾸기 시도 -> 실패
tuple_test[0] = 100 #TypeError 오류 출력!
tuple_test2 = "A", "B", "C", "D"
print("type(tuple_test2): ", type(tuple_test2))
#출력결과 : type(tuple_test2): <class 'tuple'>
리스트를 선언했을 땐 대괄호를 사용했지만 튜플은 소괄호( )를 사용한다.
위 코드를 보면 튜플 내부의 데이터를 바꾸려고 시도하니 에러가 출력되었고,
괄호 없이도 튜플 선언이 가능하다는 것을 확인할 수 있다.
튜플로 변수의 값 교환
a, b = 10, 20
print("교환 전 값 ")
print("a:",a)
print("b:",b)
a, b = b, a
print("교환 후 값 ")
print("a:",a)
print("b:",b)
a, b = b, a라는 코드만으로 a와 b에 들어있는 데이터를 바꿀 수 있다.
튜플과 함수
def test():
return (10, 20)
a, b = test()
print(a) #출력결과 : 10
print(b) #출력결과 : 20
튜플을 함수의 리턴값으로 사용하면 여러 개의 값을 리턴하는 것이 가능하다.
2개의 값을 리턴하는 test()함수를 만들고 a, b = test()로 코드를 작성해보면,
a와 b에 각각 한 개의 값이 들어간다.
for i, value in enumerate([1,2,3,4,5,6]):
print("{}번째 요소는 {}입니다".format(i, value))
추가로 전에 enumerate()함수를 공부했을 때 위 코드처럼 작성을 했었는데
for구문에 쓰인 i, value도 사실 괄호가 생략된 튜플의 형태이다.
람다
: 요즘엔 함수를 매개변수로 전달하는 코드를 많이 사용한다. 파이썬에서 이런 코드를 좀 더 효율적으로 작성할 수 있게 해주는 기능을 말한다.
함수를 매개변수로 전달하는 것부터 람다까지 차근차근 정리해보겠다.
filter( )함수와 map( )함수
함수를 매개변수로 전달하는 대표적인 표준 함수로 map( )과 fiilter( )함수가 있다.
map(함수, 리스트) : 리스트를 함수에 넣어 리턴 된 값을 리스트로 구성해주는 함수
filter(함수, 리스트) :리스트를 함수에 넣어 TRUE인 리턴 값을 리스트로 구성해주는 함수
def power(item):
return item * item
def under_3(item):
return item < 3
list_input_a = [1,2,3,4,5]
#map( )함수 사용
output_a = map(power, list_input_a)
print(list(output_a))
#출력결과 : [1, 4, 9, 16, 25]
#filter( )함수 사용
output_b = filter(under_3, list_input_a)
print(list(output_b))
#출력결과 : [1, 2]
출력결과를 list( )함수로 감싸지 않으면
<map object at 0x03862270>처럼
제너레이터(genertaor)로 결과 값이 출력된다.
위 예제를 보면 map 함수와 filter 함수의 사용법을 어렴풋이 이해할 수 있을 것이다.
람다의 개념
매개변수로 더 간단하게 함수를 전달하기 위한 기능이다.
lambda 매개변수: 리턴값
power = lambda x: x * x
under_3 = lambda x: x< 3
list_input_a = [1,2,3,4,5]
#map( )함수 사용
output_a = map(power, list_input_a)
print(list(output_a))
#filter( )함수 사용
output_b = filter(under_3, list_input_a)
print(list(output_b))
def로 함수를 정의하고 return값을 지정해줬던 기존의 함수 형태에 비해 많이 간결해졌다.
이 코드의 결과는 filter( )함수와 map( )함수에서 썼던 코드의 결과와 같다.
사실 람다는 함수를 만들지 않고도 매개변수에 넣는 것이 가능하다.
list_input_a = [1,2,3,4,5]
#map( )함수 사용
output_a = map(lambda x: x*x , list_input_a)
print(list(output_a))
#filter( )함수 사용
output_b = filter(lambda x: x<3, list_input_a)
print(list(output_b))
제곱을 구하는 power( )함수와 3보다 작은 수를 구하는 under_3( )함수를 만들지 않고, 매개변수에 람다를 바로 넣어 더 깔끔하게 만든 경우이다.
람다를 사용함으로써 얻을 수 있는 장점은
1. 코드를 더 깔끔하게 작성할 수 있다.
2. 어떤 함수인지 파악하기 위해 다시 스크롤을 올리지 않아도 된다.
이다.
lambda x, y: x * y 처럼 매개변수가 여러 개인 람다도 사용할 수 있다!
'자기계발 > Python' 카테고리의 다른 글
[Python] 기본15. 구문 오류와 예외 (0) | 2022.03.10 |
---|---|
[Python] 기본14. 파일 처리 open(),close(),with 키워드 (0) | 2022.03.09 |
[Python] 기본12. 재귀함수와 메모화 (0) | 2022.03.07 |
[Python] 기본11. 함수(가변, 기본, 키워드 매개변수) (0) | 2022.03.06 |
[Python] 기본10. 문자열, 리스트, 딕셔너리와 관련된 기본 함수 (0) | 2022.03.04 |