2022. 8. 11. 18:23ㆍ개발공부 기강잡자/Python
파이썬에는 Tuple (튜플)이라는 자료형이 있다.
리스트와 유사하며, 여러개의 값을 묶어 저장할 때 사용한다. 리스트와 동일하게 인덱싱, 슬라이싱이 가능하다!
리스트와 비교했을 때,
- 리스트는 데이터를 []
로 감싸며, 튜플은 ( )
으로 데이터를 감싼다.
- 리스트는 값을 생성, 삭제, 수정이 가능하지만 튜플은 불가능하다.
= 튜플은 Immutable(변하지 않는) 객체이다.
= 튜플의 요소를 변경하거나 삭제하려고 하면 오류가 발생한다.
(위 게시글에 Immuatable object에 대한 내용이 설명되어 있으니 참고하는 것도 좋을 것 같습니다.)
튜플의 패킹 Packing 과 언패킹 Unpacking
- 하나 이상의 값을 튜플로 묶는 행위 : 패킹
- 튜플에 묶여 있는 값들을 풀어내는 행위 : 언패킹
# 패킹
tri_one = 12, 15
print(tri_one)
# 언패킹 - 튜플에 저장된 값의 수와 이를 저장할 변수의 수가 일치
tri_three = (12, 15)
bt, ht = tri_three
print(bt, ht)
실행결과
- 한 변수에 ,(콤마)로 값을 구분하여 할당하면 튜플 형태의 데이터가 생성된다.
- (12, 15)와 같이 튜플 형태로 대입해도 튜플이 생성된다. (괄호를 생략해도 무방하다)
- 언패킹 시에는 튜플의 값을 저장하려는 변수에 튜플을 할당하면 된다. 이때, 튜플에 저장된 값의 갯수와 이를 저장할 변수의 수가 일치해야한다.
파이썬의 튜플 자료형을 사용하면 이런 멋진 것도 할 수 있다.
# 1
nums_a = (1, 2, 3, 4, 5)
n1, n2, *others = nums_a # 둘이상의 값을 리스트로 묶을 때 * 를 사용
print("n1:{}, n2:{}, others:{}".format(n1, n2, others))
# 2
nums_b = (1, 2, 3, 4, 5)
first, *others, last = nums_b
파이썬의 경우 * 기호가 포인터가 아니라 튜플에서 둘 이상의 값을 리스트로 묶어 저장할 때 사용한다! 가변적인 갯수의 값을 리스트에 할당할 때 사용한다.
#1 의 경우, (1, 2, 3, 4, 5) 값을 갖는 튜플을 n1, n2, others
라는 변수에 언패킹한다.
이때 * 기호를 볼 수 있는데, 튜플 값 순서대로 n1, n2
에 값을 대입하고 남은 나머지의 값을 others
에 리스트로 저장한다.
# 2의 경우는 *others
변수가 중앙에 있는 것을 볼 수 있는데, 처음과 마지막 값을 각각 first, last
변수에 저장하고, 맨 앞뒤 값을 제외한 중간의 값들을 리스트로 others
변수에 저장한다.
실행결과
튜플을 함수 매개변수로 사용하기
def merge_string(*text_list) :
result = ''
print(text_list) # 문자열로 이루어진 튜플
for s in text_list :
result = result + s
return result
merge_string('a', 'b', 'c', 'd')
위는 받은 문자들(튜플형태)을 for문
으로 언패킹하여 하나의 문자열로 만드는 함수를 호출하는 소스이다.
함수에서 받는 매개변수가 *text_list
로 선언되어 있다. 이런 경우에는 함수는 값의 갯수 제한 없이 여러 개의 값을 받을 수 있다.
이를 가변인자 (Variable Parameter) 라고 하며, 임의의 갯수의 인자를 받을 수 있다.
실행결과는 다음과 같으며, 함수는 값을 튜플 형태로 받았음을 확인할 수 있다.
'개발공부 기강잡자 > Python' 카테고리의 다른 글
[Python] 파이썬 힙 - heapq 라이브러리 nlargest / nsmallest (0) | 2023.09.12 |
---|---|
[Python] Call by Reference / Call by Value | 파이썬에선 뭘 쓸까? | Mutable & Immutable (0) | 2022.07.16 |
[Python] Flask 설치하기 (0) | 2022.04.07 |
[Python] 파이썬 설치 시 Path 설정 안한 경우 Path 설정법 (0) | 2022.04.07 |