t1 = () # 비어있는 튜플
t2 = (1,2,3) # 괄호 사용
t3 = 1,2,3 # 괄호가 없어도 튜플이 됨
print type(t1), type(t2), type(t3)
<type 'tuple'> <type 'tuple'> <type 'tuple'>
r = (1,) # 자료가 한 개일 때는 반드시 콤마가 있어야 한다.
r = 1, # 괄호는 없어도 콤마는 있어야 한다.
t = (1, 2, 3)
print t * 2 # 반복
print t + ('PyKUG', 'users') # 연결
print t[0], t[1:3] # 인덱싱, 슬라이싱
print len(t) # 길이
print 1 in t # 멤버십 테스트
(1, 2, 3, 1, 2, 3) (1, 2, 3, 'PyKUG', 'users') 1 (2, 3) 3 True
t[0] = 100 # 튜플은 변경 불가능, 에러발생
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-10-ded308ebf8b1> in <module>() ----> 1 t[0] = 100 # 튜플은 변경 불가능, 에러발생 TypeError: 'tuple' object does not support item assignment
t = (12345, 54321, 'hello!')
u = t, (1, 2, 3, 4, 5) # 튜플 안 원소로 다른 튜플을 가질 수 있음
print u
t2 = [1, 2, 3] # 튜플 안 원소로 리스트 가질 수 있음
u2 = t2, (1, 2, 4)
print u2
t3 = {1:"abc", 2:"def"} # 튜플 안 원소로 사전 가질 수 있음
u3 = t3, (1, 2, 3)
print u3
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5)) ([1, 2, 3], (1, 2, 4)) ({1: 'abc', 2: 'def'}, (1, 2, 3))
x, y, z = 1, 2, 3 # 튜플을 이용한 복수 개의 자료 할당
print type(x), type(y), type(z)
print x
print y
print z
<type 'int'> <type 'int'> <type 'int'> 1 2 3
x = 1
y = 2
x, y = y, x # 튜플을 이용한 두 자료의 값 변경
x, y
(2, 1)
t = 1, 2, 'hello'
x, y, z = t
a = ['foo', 'bar', 4, 5]
[x, y, z, w] = a
튜플과 리스트와의 공통점
리스트와 다른 튜플만의 특징
list() 와 tuple() 내장 함수를 사용하여 리스트와 튜플을 상호 변환할 수 있음
T = (1,2,3,4,5)
L = list(T)
L[0] = 100
print L
T = tuple(L)
print T
[100, 2, 3, 4, 5] (100, 2, 3, 4, 5)
def calc(a, b):
return a+b, a*b
x, y = calc(5, 4)
print 'id : %s, name : %s' % ('gslee', 'GangSeong')
id : gslee, name : GangSeong
def calc(a, b):
return a+b, a*b
args = (4,5)
calc(*args)
(9, 20)
d = {'one':1, 'two':2}
d.items()
[('two', 2), ('one', 1)]
import os
p = os.path.abspath('python06.ipynb') # 상대경로를 절대경로로 변환
print p
print
print os.path.exists(p) # 파일의 존재 여부 반환
print os.path.getsize(p) # 파일 크기 반환
print os.path.split(p) # (디렉토리명, 파일명)으로 분리하여 튜플 반환
print
/Users/yhhan/git/ipython/python06.ipynb True 19213 ('/Users/yhhan/git/ipython', 'python06.ipynb')
print os.path.join(os.sep + "work", 'test.txt') # 디렉토리와 파일명 결합
print
print os.path.normpath(os.sep + "Users" + os.sep + "python" + os.sep + "." + os.sep + "test.txt") # 경로명 정규화
print
print os.path.splitext(os.sep + "Users" + os.sep + "python" + os.sep + "test.txt") # 경로명에서 확장자를 분리하여 튜플 반환
/work/test.txt /Users/python/test.txt ('/Users/python/test', '.txt')
import urlparse
a = 'http://some.where.or.kr:8080/a/b/c.html;param?x=1&y=2#fragment'
b = urlparse.urlparse(a)
print type(b)
print b
<class 'urlparse.ParseResult'> ParseResult(scheme='http', netloc='some.where.or.kr:8080', path='/a/b/c.html', params='param', query='x=1&y=2', fragment='fragment')
import urlparse
a = 'http://some.where.or.kr:8080/a/b/c.html;param?x=1&y=2#fragment'
u = urlparse.urlparse(a)
print urlparse.urlunparse(u)
print
l = ["http", "link.koreatech.ac.kr", "index.html", "", "x=1&y=2", "frag"]
print urlparse.urlunparse(l)
print
l2 = ("http", "link.koreatech.ac.kr", "index.html", "", "x=1&y=2", "frag")
print urlparse.urlunparse(l2)
http://some.where.or.kr:8080/a/b/c.html;param?x=1&y=2#fragment http://link.koreatech.ac.kr/index.html?x=1&y=2#frag http://link.koreatech.ac.kr/index.html?x=1&y=2#frag
import urlparse
import os
a = 'http://some.where.or.kr:8080/a/b/c.html;param?x=1&y=2#fragment'
u = urlparse.urlparse(a)
print u
print
lu = list(u)
print lu
print
lu[2] = os.path.split(lu[2])[0] # '/a/b/c.html'을 '/a/b'와 'c.html'로 분리
lu[3] = ''
print lu
print
b = urlparse.urlunparse(lu)
print b
ParseResult(scheme='http', netloc='some.where.or.kr:8080', path='/a/b/c.html', params='param', query='x=1&y=2', fragment='fragment') ['http', 'some.where.or.kr:8080', '/a/b/c.html', 'param', 'x=1&y=2', 'fragment'] ['http', 'some.where.or.kr:8080', '/a/b', '', 'x=1&y=2', 'fragment'] http://some.where.or.kr:8080/a/b?x=1&y=2#fragment
b = 'http://some.where.or.kr:8080/a/b/c.html?x=1'
urlparse.urljoin(b, 'd.html')
'http://some.where.or.kr:8080/a/b/d.html'
b = 'http://some.where.or.kr:8080/a/b/c.html?x=1'
urlparse.urljoin(b, '/')
'http://some.where.or.kr:8080/'