cs

우어어.... 건물주...

 


펼쳤을때 부터 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

+ Recent posts