[파이썬]

[파이썬] 튜플과 람다

뽕규의 스케치북 2025. 2. 8. 00:24
728x90

함수 고급

  • 튜플 - 함수와 함께 많이 사용되는 리스트와 비슷한 자료형으로, 한번 결정된 요소는 바꿀 수 없음
  • 람다 - 간단하고 쉽게 함수를 선언하는 방법 - 주로 1회용 함수를 만들때 사용함

튜플

튜플은 리스트와 비슷한 자료형이다

튜플은 한번 결정된 요소(element)를 바꿀 수 없다

(데이터, 데이터, 데이터, ...)
tuple = (10,20,30)
tuple[0] --> 10
tuple[1] --> 20
tuple[2] --> 30

튜플은 리스트와 다르게 한번 정한 요소는 변경이 불가능하기 때문에 변경 시도 시 TypeError 예외가 발생한다

tuple[1] = 40

#TypeError occur
Traceback (most recent call last):
    file "<pyshell#1>", line 1, in <module>
        tuple_test[0] = 1
TypeError: 'tuple' object does not support item assignment

요소를 하나만 가지는 튜플 생성법

(273) -> X
[273] -> X
(273,) -> O #요소를 하나만 가지는 튜플은 요소 뒤에 쉼표(,)를 찍어줘야함

괄호 없는 튜플

파이썬의 튜플과 리스트는 1대1 대응(?) 방식으로 할당이 가능하다

[a,b] = [10,20]
(c,d) = (10,20)

print(a,b,c,d)

#result
10
20
10
20

튜플의 특이한 성질 덕분에 괄호를 생략해도 튜플로 인식할 수 있는 경우는 괄호를 생략 가능하다

tuple_test = 10,20,30,40
print(type(tuple_test))
print(tuple_test)

#result
<class 'tuple'>
(10,20,30,40)

괄호없는 튜플의 성질과 1대1 대응으로 할당이 가능한 성질을 활용한 변수 값 교환

a,b = 10,20
print(a,b)
a,b = b,a
print(a,b)

#result
10 20
20 10

튜플과 함수

튜플은 함수의 리턴에 많이 사용됨 (enumerate() 함수만 봐도 튜플로 반환됨)

함수 리턴에 튜플을 사용하면 여러개의 값을 리턴하고 할당할 수 있기 때문

def tuple_func():
	return (10,20)
	
a,b = tuple_func()
print(a,b)

#result
10,20

튜플도 리스트와 같이 +/* 연산자를 사용할 수 있음

괄호 없이 여러 값을 할당할 수 있는 것은 오직 튜플로만 할 수 있는 일임

람다

기능을 매개변수로 전달하는 코드를 많이 사용하는 요즘을 위해 코드를 좀 더 효율적으로 작성할 수 있도록 파이썬은 람다(lambda)라는 기능을 제공함

함수의 매개변수로 함수 전달하기

  • 콜백 함수(callback function) - 함수의 매개변수에 사용하는 함수
def print_hi():
    print("hi")

def repeat_5_times(func):
    for i in range(5):
        func()
        
print(repeat_5_times(print_hello)) #매개변수로 print_hello()를 전달함

filter() & map()

함수를 매개변수로 사용하는 대표적인 Bulit-in Function으로 map(), filter()가 있음

  • map(함수, 리스트) - 리스트의 요소를 함수에 넣고 리턴값으로 새로운 리스트를 구성해줌
  • filter(함수, 리스트) - 리스트의 요소를 함수에 넣고 리턴 값이 true인 것으로 새로운 리스트를 구성해줌
def power(item):
    return item**2

def under_3(item):
    return item<3

list_input_a = [1,2,3,4,5]

output = map(power,list_input_a)
print("result of map function: ", list(output), output, sep=" ")
print()
output_b = filter(under_3,list_input_a)
print("result of filter function: ", list(output_b), output_b, sep=" ")

#result
result of map function:  [1, 4, 9, 16, 25] <map object at 0x000002246680F2B0>

result of filter function:  [1, 2] <filter object at 0x000002246680F2E0>

<map object>, <filter object>는 제너레이터(generator)라고 부른다.

람다의 개념

람다란 간단한 함수를 쉽게 선언하는 방법

lambda 매개변수 : 리턴해줘야 하는 매개변수를 사용하는 표현식

위 코드의 power()와 under_3()를 lambda로 선언하면 아래와 같이 된다

#power
lambda x : x**2
#under_3
lambda x : x<3

람다는 함수의 매개변수에 바로 넣을 수 있다

map(lambda x:x**2,list_input_a) #함수가 들어가는 인수 자리에 lambda를 넣은 것
728x90