Python에서 변경할 수 없는(변경할 수 없는) 시퀀스 개체인 튜플.
단일 요소 또는 빈 튜플이 있는 튜플을 생성할 때는 주의해야 합니다.
여기에는 다음 세부 정보가 설명되어 있습니다.
- 요소가 1개인 튜플
- 튜플 둥근 괄호는 생략할 수 있습니다.
- 빈 튜플
- 함수 인수의 튜플
요소가 1개인 튜플
요소가 하나인 튜플을 생성하고 대괄호() 안에 하나의 객체만 쓰려고 하면 대괄호()가 무시되고 처리되며 튜플로 간주되지 않습니다.
single_tuple_error = (0)
print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>
요소가 하나인 튜플을 생성하려면 후행 쉼표가 필요합니다.
single_tuple = (0, )
print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>
예를 들어 + 연산자를 사용하여 여러 튜플을 연결할 때 하나의 요소를 추가하려고 하고 쉼표를 잊어버리면 오류가 발생합니다.
# print((0, 1, 2) + (3))
# TypeError: can only concatenate tuple (not "int") to tuple
print((0, 1, 2) + (3, ))
# (0, 1, 2, 3)
튜플 둥근 괄호는 생략할 수 있습니다.
요소가 하나인 튜플에 쉼표가 필요한 이유는 튜플이 대괄호()로 묶인 값이 아니라 쉼표로 구분된 값이기 때문입니다.
튜플을 생성하는 것은 대괄호가 아니라 쉼표입니다.
Tuples — Built-in Types — Python 3.10.4 Documentation
대괄호()가 생략되어도 튜플로 처리됩니다.
t = 0, 1, 2
print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>
객체 뒤의 불필요한 쉼표는 튜플로 간주됩니다.
t_ = 0,
print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>
빈 튜플
위에서 언급했듯이 둥근 괄호()는 튜플을 나타낼 때 생략할 수 있지만 빈 튜플을 생성할 때는 필요합니다.
공백이나 쉼표만 있으면 SyntaxError가 발생합니다.
empty_tuple = ()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
# empty_tuple_error =
# SyntaxError: invalid syntax
# empty_tuple_error = ,
# SyntaxError: invalid syntax
# empty_tuple_error = (,)
# SyntaxError: invalid syntax
빈 튜플은 인수 없이 tuple()에 의해 생성될 수도 있습니다.
empty_tuple = tuple()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
함수 인수의 튜플
튜플 대괄호()는 구문이 모호한 경우에도 필요합니다.
함수 인수는 쉼표로 구분하지만 이 경우 함수가 튜플인지 여부를 대괄호()의 유무로 명시적으로 나타내야 합니다.
괄호()가 없으면 각 값이 각 인수에 전달됩니다. 괄호()를 사용하여 각 값은 하나의 인수에 대한 튜플로 전달됩니다.
def example(a, b):
print(a, type(a))
print(b, type(b))
example(0, 1)
# 0 <class 'int'>
# 1 <class 'int'>
# example((0, 1))
# TypeError: example() missing 1 required positional argument: 'b'
example((0, 1), 2)
# (0, 1) <class 'tuple'>
# 2 <class 'int'>
튜플이 별표 *로 표시되면 튜플의 요소를 확장하여 인수로 전달할 수 있습니다.
example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>
자세한 내용은 다음 문서를 참조하세요.