2 장 자료형 및 연산자 - 김욱동 -
목 차목 차 변수 자료형 유니코드 리스트 튜플 세트 사전 부울 얕은 / 깊은 복사
변 수변 수 변 수변 수 명명규칙 문자, 숫자, 밑줄 (_), 숫자는 처음 나올 수 없음 예약어는 사용 X 사용 예 and, as, assert, break, class, continue, def, del, elif, else, except, is, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, yield >>> friend = 1 >>> 원종필 = 2 >>> (a, b) = (1, 2) 튜플 사용 >>> [c, d] = [3, 4] 리스트 사용 >>> e = f = g = 1
자료형 - 수치 자료형 수치 ( 숫자 ) int, long, float, complex 3.x 는 2.x 와 달리 long 형이 삭제됨 0o 는 8 진수, 0b 는 2 진수, 0x 는 16 진수로 인식 각 진수 변환 함수 존재 oct(), hex(), bin()
자료형 – 수치 ( 계속 ) 자료형 >>> type(1) >>> type(3.14) >>> x = 3 – 4j >>> type(x) >>> x.imag -4.0 >>> x.real 3.0 # 원과 삼각형의 넓이를 구하는 예 >>> r = 2 >>> circle_area = 3.14 * (r ** 2) >>> x = 3 >>> y = 4 >>> triangle_area = x * y / 2 >>> print(circle_area, triangle_area)
자료형 - 문자 자료형 문자열 단일인용부호 (‘) 나 다중인용부호 (“) 로 묶어서 표현 문자열을 쓰는 그대로 화면에 출력하기 위한 “”” 혹은 ‘’’ 제공 >>> print(“”” 새벽에 일어나서 하니깐 대박 피곤해. 번개는 신들린 마냥 침. 아.. 예민한 자동차가 번개 칠 때마다 울어댄다. - 김욱동 “””) 새벽에 일어나서 하니깐 대박 피곤해. 번개는 신들린 마냥 침. 아.. 예민한 자동차가 번개 칠 때마다 울어댄다. - 김욱동
자료형 - 문자 자료형 이스케이브 문자 사용 예의미 \n 라인피드 ( 줄바꿈 ) \t 탭 \r 캐리지 리턴 \0 널 (Null) \\ 문자 ‘\’( 역슬래시 ) \’ 단일 인용부호 (‘) \” 이중 인용부호
자료형 - 문자 자료형 문자열 연산자 ‘+’ 는 문자열 병합 ( 문자열 끼리는 생략 가능 ) ‘*’ 는 문자열 반복 인덱스를 통한 접근 가능 ( 단, 문자열 변경 불가 ) ○ 양수는 시작 위치 기준, 음수는 끝 위치 기준 슬라이싱을 통한 특정 문자열 추출 ○ [ 시작위치 : 끝위치 ] 문자열 숫자 간 변환 연산자 제공 ○ str(), int(), float() …
자료형 - 문자 자료형 >>> ‘py’ ‘thon’ ‘python’ >>> ‘py’ + ‘thon’ ‘python’ >>> ‘py’ * 3 + ‘thon’ ‘pypypython’ >>> a = ‘python’ >>> a[5] ‘n’ >>> a[1:4] ‘yth’ >>> a[-2:] # a[-2]???? ‘on’ >>> str(3.14) ‘3.14’ >>> int(“49” 49
유니코드 파이썬 2.x 일반적인 문자 외에 유니코드를 별도로 지원 ○ u 를 붙이거나 unicode(str, ‘code_page’) 함수 이용 >>> unicode(‘ 가 ’, ‘cp949’) u’\uac00’ >>> ‘ 가나다라 ’.decode(‘cp949’) u’\uac00\ub098\ub2e4\ub77c’ >>> u’\uac00’.encode(‘cp949’) ‘\xb0\xa1’ >>> print u’\uac00’.encode(‘cp949’) 가
유니코드 파이썬 3.x 일반 문자열이 기본적으로 모두 유니코드 유니코드 이외에 인코딩이 있는 문자열은 bytes 로 문자의 유니코드 값은 ord() 로 유니코드 값을 문자로 변화할 때는 chr() 메소드 이용 >>> type(‘ 가 ’) >>> ‘ 가 ’.encode(‘utf-8’) b’\xea\xb0\x80’ >>> type(‘ 가 ’.encode(‘utf-8’)) >>> ord(‘s’) 115 >>> chr(115) ‘s’
리스트 값들의 나열 인덱싱 및 슬라이싱 기능 append(), extend() insert() 를 통한 추가 pop() 및 remove() 를 통한 삭제 index() 를 통한 인덱스 추적 sort() 와 reverse() 를 통한 순 / 역방향 정렬 키 값을 정해 정렬방식을 조정할 수 있음 count() 를 통한 개수 추적
리스트 >>> names = [‘ 이성희 ’, ‘ 김욱동 ’, ‘ 원종필 ’, ‘ 박준식 ’] >>> type(names) >>> names.append(‘ 김현주 ’) >>> names [‘ 이성희 ’, ‘ 김욱동 ’, ‘ 원종필 ’, ‘ 박준식 ’, ‘ 김현주 ’] >>> names.insert(1, ‘ 누구냐 넌 ’) >>> names [‘ 이성희 ’, ‘ 누구냐 넌 ’, ‘ 김욱동 ’, ‘ 원종필 ’, ‘ 박준식 ’, ‘ 김현주 ’] >>> names.index(‘ 누구냐 넌 ’) 1 >>> names.count(‘ 김욱동 ’) 1 >>> names.pop(); # default = last_item ‘ 김현주 ’ >>> names >>> [‘ 이성희 ’, ‘ 누구냐 넌 ’, ‘ 김욱동 ’, ‘ 원종필 ’, ‘ 박준식 ’]
리스트 >>> names.sort() >>> names [' 김욱동 ', ' 누구냐 넌 ', ' 박준식 ', ' 원종필 ', ' 이성희 '] >>> def mysort(x) : return x[-2] >>> names.sort(key=mysort) >>> names [' 누구냐 넌 ', ' 이성희 ', ' 김욱동 ', ' 원종필 ', ' 박준식 '] >>> names.sort(key=mysort, reverse=True) >>> names [' 박준식 ', ' 원종필 ', ' 김욱동 ', ' 이성희 ', ' 누구냐 넌 ']
세트 집합과 동일 제공되는 메소드는 리스트와 거의 유사 교집합, 차집합, 합집합 등 집합 메소드 제공 인덱스 지원하지 않음 >>> a = {1, 2, 3} >>> b = {3, 4, 5} >>> print(a, b) {1, 2, 3} {3, 4, 5} >>> a.union(b) # a | b {1, 2, 3, 4, 5} >>> a.intersection(b) # a & b {3} >>> a.difference(b) # a - b {1, 2}
튜플 리스트와 유사하나 () 로 묶어 표현 읽기 전용, 속도 빠름 인덱스 지원 >>> t = (1, 2, 3) >>> type(t) >>> a, b = 1, 2 >>> print(a, b) 1 2 >>> a, b = b, a # swap >>> print(a, b) 2 1 >>> 1 in t True >>> 4 in 5 False
사전 키와 값의 쌍으로 표현 인덱스는 지원하지 않음. 사전의 내용을 얻기 위해 items(), keys(), values() 메서드 사용 >>> d = dict(a=1, b=3, c=5) >>> d {‘a’: 1, ‘c’: 5, ‘b’: 3} >>> color = {“apple”:”red”, “banana”:”yellow”} >>> color {'apple': 'red', 'banana': 'yellow'} >>> color[0] # error! >>> del color[“apple”] >>> color.clear()
부울 참 (True) 과 거짓 (False) 을 타나내는 자료형 부울 값들 간의 논리연산이나, 수치들간의 비교연산의 결과로 사용 논리연산에 수치사용시 0 은 False, 0 이외의 음수 및 양수는 true 로 간주 >>> 1 < 2 True >>> True & True # True and True True >>> bool(0) False >>> bool(-1) True
얕은 / 깊은 복사 파이썬에서 모든 변수는 객체의 주소를 가짐 >>> a = [1, 2, 3] >>> b = a >>> a[0] = 38 >>> print(a, b) [38, 2, 3] >>> id(a), id(b) ( , ) a b [1, 2, 3] 변수 참조 객체
얕은 / 깊은 복사 객체의 공유를 막기 위해서 copy 모듈사용 얕은 복사 copy.copy(object) 깊은 복사 copy.deepcopy(oject)
얕은 / 깊은 복사 >>> import copy >>> a=[1,[2,3]] >>> cp_a = copy.copy(a) >>> dcp_a = copy.deepcopy(a) >>> a, cp_a, dcp_a ([1, [2, 3]], [1, [2, 3]], [1, [2, 3]]) >>> id(a), id(cp_a), id(dcp_a) ( , , ) >>> a[1].append(4) >>> a, cp_a ([1, [2, 3, 4]], [1, [2, 3, 4]]) >>> a[0] = 333 >>> a, cp_a ([333, [2, 3, 4]], [1, [2, 3, 4]]) >>> a, cp_a, dcp_a ([333, [2, 3, 4]], [1, [2, 3, 4]], [1, [2, 3]])
The End