펼쳤을때 부터 1도 모르는 놈들이 나왔다.
일단 다 이해하기보다는, 개념정리 간단히 이런 느낌이니까... 천천히 해봅시다!
튜플: 리스트와 비슷한 자료형, 주의점?은 한번 결정된 요소는 바꿀 수 없음
람다: 매개변수로 함수를 전달하기 위해 함수 구문 작성이 번거롭고, 코드 공간낭비라고 생각이 들때 함수를 간단히 쉽게 선언하는 방법
설명을 봐도 모르겠으니.. 예제와 함께 이해해보자.
튜플
#리스트와 튜플의 특이한 사용
[a, b] = [10, 20]
(c, d) = (10, 20)
print("a:", a)
print("b:", b)
print("c:", c)
print("d:", d)
리스트랑 큰 차이는 잘 모르겠다..
책에서 언급한 차이 중 하나는, 괄호가 없이 사용이 된다는 것.
# 괄호없는 튜플
tuple_test =10, 20, 30, 40
print("type(tuple_test):", type(tuple_test))
print()
#괄호없는 튜풀 활용
a, b, c = 10, 20, 30
print("#괄호가 없는 튜플을 활용한 할당??..")
print("a:", a)
print("b:", b)
print("c:", c)
괄호를 생략해도 튜플로 인식할 수 있는 경우는 괄호를 생략 해도 된다.
예전에 항상 괄호 하나때문에 뭐가 틀렸는지 한참 찾고 했는데, 이런점이 큰 차이긴 한것같다.
또한 교환 같은 것도 가능하다.
# 변수의 값을 교환하는 튜플
a, b = 10, 20
print("교환 전 값")
print("a:", a)
print("b:", b)
print()
#값 교환하기
a, b = b, a
print("#교환 후 값")
print("a:", a)
print("b:", b)
책에서 편리하다 한것 중에 이게 좀 가장 편리한 듯 하다. 그냥 직관적으로 쉽게 바꾸는거니까.
그리고 튜플은 함수의 리턴에 많이 사용한다고 한다.
#여러개 값 리턴 방식 , 함수와 튜플 함께 사용
#함수 선언
def test():
return(10, 20)
#여러개 값 리턴
a, b = test()
#출력
print("a:", a)
print("b:", b)
위에서처럼 괄호 없이 여러 값을 할당하는 것은 튜플만 가능하다고 하니, 언젠가 필요하다고 생각한다.
람다
프로그래밍 언어에서 함수라는 기능을 매개변수로 전달하는 코드를 많이 사용하는데, 그리고 이런 코드를 더 효율적으로 사용 할 수있도록 한것이 파이썬에서는 람다 라고 한다.
아래는 함수의 매개변수로 함수를 전달하는 코드.
#함수의 매개변수로 함수 전달하기
def call_10_times(func):
for i in range(10):
func()
#간단한 출력 함수
def print_hello():
print("안녕하세요")
#조합하기
call_10_times(print_hello)
filter()함수와 map()함수
함수를 매개변수로 전달하는 표준함수로 filter와 map이 있다.
filter(): 리스트의 요소를 함수에 넣고 리턴된 값이 TRUE인 것으로, 새로운 리스트를 구성해주는 함수
map(): 리스트의 요소를 함수에 넣고 리턴된 값으로 새로운 리스트를 구성해 주는 함수
#함수 선언
def power(item):
return item*item
def under_3(item):
return item <3
#변수 선언
list_input_a = [1, 2, 3, 4, 5]
#map()함수 사용
##map(함수, 리스트)
output_a = map(power, list_input_a)
print("#map()함수의 실행결과")
print("map(power, list_input_a):", output_a)
print("map(power, list_input_a):)", list(output_a))
print()
#filter()함수를 사용
output_b = filter(under_3, list_input_a)
print("#filter()함수의 실행결과")
print("filter(under_3, list_input_a):", output_b)
print("filter(under_3, list_input_a):", list(output_b))
예제처럼
map을 사용하고 새로운 리스트를 얻었고,
filter를 사용하고 true인것만 가지고 와서 리스트를 변경해줬다.
결과를 추출 했을 때 object라고 하면서 나오는데, 이것을 제네레이터(generator)라고 부른다.
제네레이터는 좀 나중에 다시 알아보기를 해보겠다..
람다의 개념
책을 좀 보다보면 계속 코드 공간낭비와, 번거로움을 해결하기 위해 라는 말을 자주 보는데, 일하면서도 느끼지만 코드 최적화?효율화?를 해야 속도는 속도 그리고 비용도 감소되니 중요할 수 밖에 없다.
암튼 그래서 람다라는 개념을 다시 들여다 보고 효율적인 방식을 찾았나보다.
람다는 즉 간단한 함수를 쉽게 선언하는 방법이다.
-> 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("map(power, list_input_a):", output_a)
print("map(power, list_input_a):)", list(output_a))
print()
#filter함수 사용
output_b=filter(under_3, list_input_a)
print("#filter()함수의 실행결과")
print("filter(under_3, list_input_a):", output_b)
print("filter(under_3, list_input_a):", list(output_b))
위에서 처럼 함수를 귀찮게 만들고 리턴값 하는 것 보다, 람다라는 개념을 확실히 사용해서 매개변수와 리턴값을 한줄에 적어줬다.
더 깔끔한 방법이 있는데, 인라인 람다를 사용해주면 된다.
#변수선언
list_input_a=[1,2,3,4,5]
#map함수 선언
output_a=map(lambda x:x*x, list_input_a)
print("map(power, list_input_a):", output_a)
print("map(power, list_input_a):)", list(output_a))
print()
#filter함수 선언
output_b=filter(lambda x:x<3, list_input_a)
print("#filter()함수의 실행결과")
print("filter(under_3, list_input_a):", output_b)
print("filter(under_3, list_input_a):", list(output_b))
output안에 바로 람다를 사용해서 함수를 선언 안하고 바로 매개변수 넣고 사용했다.
결과는 위와 다 동일하지만, 코드는 더더욱 깔끔하다.
'Data Analysis > Python_Grammar' 카테고리의 다른 글
[혼공파] 예외 고급 (0) | 2022.03.20 |
---|---|
[혼공파] 구문 오류와 예외 (0) | 2022.03.18 |
[혼공파] 함수의 활용 + (추가) (0) | 2022.03.02 |
[혼공파] 함수의 활용 (0) | 2022.02.27 |
[혼공파] 함수 만들기 (0) | 2022.02.20 |