다른 언어를 공부해보신 분은 두 변수의 값을 서로 바꾸어 본 적이 있으실 텐데요, 보통 다음과 같은 방법을 사용합니다.
>>> a = 10
>>> b = 20
>>> temp = a # a 값을 temp에 저장 (temp = 10)
>>> a = b # b 값을 a에 저장 (a = 20)
>>> b = temp # temp 값을 b에 저장 (b = 10)
>>> print a, b
20 10
이렇게 두 변수 값을 맞바꾸기 위해선 또 다른 변수 temp가 필요합니다.
좀 번거롭죠? 변수가 많을수록 더 귀찮아질테구요.
그런데 파이썬에선 이런 일을 간단하게 할 수 있는 기막힌 방법이 있습니다.
>>> c = 10
>>> d = 20
>>> c, d = d, c
>>> print c,d
20 10
너무 간단하지요? 저는 이것을 보고 웃어버렸습니다. 헬헬헬...
세 번째 줄에서 등호 왼쪽은 c, d라는 변수가 담긴 튜플이구요, 오른쪽은 d와 c의 값이 담긴 튜플입니다. 그래서 d의 값은 c로 들어가고, c의 값은 d로 들어갑니다.
이런 일들이 차례차례 일어나는 것이 아니고, 동시에 처리된다는군요.
이번엔 함수에서 튜플이 요긴하게 쓰이는 것을 보여드리지요.
아래의 함수는 인자(매개변수)를 주는 대로 받아먹는 함수입니다.
>>> def magu_print(x, y, *rest): # 마구찍어 함수
... print x, y, rest
...
>>> magu_print(1,2,3,5,6,7,9,10)
1 2 (3, 5, 6, 7, 9, 10)
이와 같이 마구찍어 함수는 인자를 두 개 이상만 주면 나머진 다 알아서 처리한답니다.
함수를 정의할 때 인자에 별표를 붙여두면 그 이후에 들어오는 것은 모두 튜플에 집어넣는 것이죠.
위에선 (3, 5, 6, 7, 9, 10)가 하나의 튜플로 묶였습니다.
꽤 쓸만할 것 같죠? 다른 언어로 이런 함수를 만들려면 고생 꽤나 해야 할거예요.
인자를 두 개, 세 개 넣어서도 실험해 보세요.
튜플의 좋은 점들을 구경했으니 이제 문법을 살펴봅시다.
>>> t = ('a', 'b', 'c')
튜플을 만들 때는 위와 같이 괄호를 써도 되고 안 써도 됩니다.
다만, 원소가 없는 튜플을 만들 때는 괄호를 꼭 써주세요.
>>> empty = ()
원소를 하나만 가진 튜플을 만들 땐 원소 뒤에 콤마(,)를 꼭 찍어주시구요.
>>> one = 5,
>>> one
(5,)
그리고 튜플은 리스트와 달리 원소값을 직접 바꿀 수 없기 때문에, 문자열에서 했던 것처럼 오려붙이는 방법을 써야한다는 것을 알아두세요.
>>> p = (1,2,3)
>>> q = p[:1] + (5,) + p[2:]
>>> q
(1, 5, 3)
>>> r = p[:1], 5, p[2:]
>>> r
((1,), 5, (3,))
튜플을 리스트로, 리스트를 튜플로 쉽게 바꿀 수도 있답니다.
>>> p = (1, 2, 3)
>>> q = list(p) # 튜플 p로 리스트 q를 만듦
>>> q
[1, 2, 3]
>>> r = tuple(q) # 리스트 q로 튜플 r을 만듦
>>> r
(1, 2, 3)
Posted by 홍반장