파이썬의 변수와 타입 - 파이썬(Python) 배우기 :: Python일반[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

Python일반
[1]
등록일:2015-05-29 09:05:53 (0%)
작성자:
제목:파이썬의 변수와 타입 - 파이썬(Python) 배우기
언어를 배울때 가장 좋은 방법은 손으로 직접 입력해 보고 그 결과를 확인하는 것이다.
아주 오래전 생전 처음 베이직 언어를 가지고 컴퓨터를 배울때 선생님이 칠판에 쓰신 코드를 입력하여 결과를 확인하는 것으로 시작했던 기억이 있다. 특히 오타나 기타 이유로 원하는 결과가 나오지 않았을 때 그 원인을 찾아 수정하는 디버깅 과정에서 이해하고 배우는 효과는
프로그래밍 실력 향상의 첩경이라 하겠다.
 
오류의 원인을 찾아 수정하는 과정을 디버깅이라 하는데, 디버깅의 대상이 되는 오류들을 다음과 같이 분류해서 적절히 대처하는 것이 필요하다.
  • Syntax errors : 문법 상의 오류로 파이썬이 가지고 있는 프로그램 작성 규칙을 벗어난 사례이다. 예를 들어 한글이름을 변수명으로 사용한 경우나 한글은 문자열로 따옴표 속에 기술해야 하는데 한쪽 따옴표를 빼먹은 경우 등을 들 수 있다. 문법 오류는 파이썬에서 명백히 뭐가 문제라고 지적해 주므로 고치는것이 어렵지 않은 편이다.
  • Runtime errors : 문법적으로 문제가 없으나 실행중에 발생하는 것으로 Exception으로 불리기도 한다.
  • Semantic errors : 오류가 발생하지 않고 컴퓨터 입장에서는 문제없이 수행했으나, 원하는 결과를 얻지 못한 경우이다.

 
통상 디버깅이라 하면 Runtime error나 semantic error을 지칭하지만, 보이지 않는 문법오류, 즉 오타인데 Syntax error가 발생하지 않았다거나 하는 경우도 많으므로 원하는 결과를 얻지 못할때 인내를 가지고 원인 찾기를 지속하기를 권한다.
 
 
일단 파이썬 IDLE의 인터프리터를 열어놓고 궁금한 것은 바로 확인하면서 검증해 보길 권한다.
 
파이썬에서는 "변수 = 값"의 형태로 대입문을 기술하면 변수 생성(선언)과 함께 값의 대입을 수행한다. C와 같은 대부분의 컴파일러 언어에서는 한 변수의 타입(예를 들어 정수형이나 문자열)이 정해지면 일정한 범위에서 해당 타입으로 사용해야 하지만 파이썬에서는 정수형으로 사용했다가 문자열을 지칭할 수도 있다. 즉 최종적으로 입력한 값의 타입이 그 변수의 타입이 된다.
# -*- coding: cp949 -*-
va=1
print type(va)
va='국어'
print type(va)
>>> ================================ RESTART ================================
>>>
<type 'int'>
<type 'str'>
>>>

위의 예제를 보면 va라는 변수가 정수형(int)으로 사용되었다가 문자열(str) 타입으로 사용된 것을 확인 할 수 있다. type() 안에 변수나 값을 넣어서 타입을 확인할 수 있다.
 

* 변수 이름 작성 규칙


  • 영문자(대소문자를 구분한다. true, True, TRUE 모두 다르다)나 _(underscore)로 시작한다
  • 첫자리이후에는 영문자와 숫자를 모두 사용할 수 있다
  • 키워드를(예약어, reserved word) 사용하지 않는다. 파이썬 내부에서 문법적 의미가 있는 것이기 때문에 변수명을 사용할 수 없다.
아래는 파이썬2.7.3의 키워드를 알아보는 방법이다. 각 키워드를 외우기 보다 어떤 기능을 하는지 알게되면 자연스럽게 키워드를 변수로 사용하는 실수는 줄어들 것이다.

>>> import keyword
>>> keyword.kwlist
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']


  • 모듈명, 클래스명, 내장 함수명을 피한다. 문법 오류는 발생하지 않더라도 예상치 않은 결과로 추후에 디버깅이 어려울 수 있다.
  • 특수 용도 변수를 구분한다.
_ 도 하나의 변수로 직전 수행 결과를 나타낸다.
_로 시작하는 변수는 모듈이나 클래스 내부 변수(private)를 지칭하고
__로 시작하는 변수는 인터프리터 내장 변수를 나타내므로 주의한다.(예, __name__, __debug__)

>>> 'abcd'.upper()
'ABCD'
>>> print _
ABCD
>>> print __name__
__main__
>>> print __debug__
True

 
 

* 변수 및 오브젝트 삭제 하기


사용할 경우가 많지 않지만 이미 선언한 변수를 삭제 할 때는 del 키워드를 사용해서
del 변수명 또는 del (변수명,변수명.....) 방식으로 기술하여 삭제할 수 있다.
일단 변수를 삭제한 다음에는 참조가 불가능하며, del로 삭제할 수 있는 것은 변수 뿐만아니라 함수, 모듈, 클래스 등도 가능하다.
 
 
파이썬에서 변수나 값에 적용할 수 있는 타입(Type)에는 아래와 같이 크게 3가지가 있다.
  • 스칼라(Scalar) : 숫자, 스트링등 가장 기본적인 타입
  • 배열(Array) : 숫자(Index)로 원소를 참조할 수 있는 리스트
  • 사전(Dictionary) : 이름(Label)으로 원소를 참조할 수 있는 리스트

 
 

* 스칼라 타입 - 숫자(Numbers)


가장 기본이 되는 타입으로 값의  표현 방식은 아래와 같다.
값 표현에 사용되는 B,X,L,E,J등의 영문자는 대문자와 소문자 모두 사용할 수 있다.
  • int : 정수형, 0으로 시작하면 8진수, 0x로 시작하면 16진수, 0b로 시작하면 2진수를 나타낸다.

>>> 10 - 33
-23
>>> 0Xff - 1 #ff=255
254
>>> 070 + 1 #70=56
57
>>> 0b1010 + 10 #1010=10

  • long : 긴정수형으로 값 뒤에 L을 붙인다. C언어와는 달리 길이 제한이 없다.

>>> 2**32
4294967296L

  • float : 부동소숫점 표현으로 8바이트에 정보를 저장하며 영문 E 다음에 지수부를 기술한다.

>>> 0.0000023
2.3e-06

  • complex : 복소수 표현을 지원하며 끝에 J를 붙인다.

 
 
숫자 변수나 값에 적용할 수 있는 연산자는 아래와 같다.
  • 대입, 치환으로 좌측에는 변수가 와야한다.
  • 덧셈
  • 뺄셈, a = -a의 방식으로 곱하기 -1의 결과를 얻을 수 있다.
  • * 곱셈
  • / 나누기
  • ** 지수 연산으로 a**b는 a의 b승 결과를 얻는다. pow(a, b)와 동일 효과
  • % 나머지 연산으로 a%b는 a나누기 b의 나머지 값을 얻는다
  • & 비트 AND 연산
  • | 비트 OR 연산
  • ^ 비트 XOR 연산
  • << 비트 left shift 연산
  • >> 비트 right shft 연산
  • +=  덧셈 치환 a=a+b를 a+=b형태로 기술할 수 있다. -=, *=, /=, %=, **=, &=, |=, ^=, <<=, >>= 등도 같은 방식이다.
  • abs(x) x의 절대값
  • int(x) x를 정수로 변환한다. int와 마찬가지로  long, float, bool등의 타입명()의 형태로 타입을 변환할 수 있다
  • round(n) n을 반올림한다. round (n, p)하면 소숫점 p자리까지 반올림 한다. round(2.534, 2)는 2.53이다
  • cmp(a,b) a와 b를 비교해서 a가 크면 1, 같으면 0, 작으면 -1을 리턴한다
  • hex(n), oct(n), bin(n) n을 16진수, 8진수, 2진수로 변환한다.
  • +=  덧셈 치환 a=a+b를 a+=b형태로 기술할 수 있다. -=, *=, /=, %=, **=, &=, |=, ^=, <<=, >>= 등도 같은 방식이다.

 
연산 순서는 괄호, 지수연산, 곱셈/나눗셈, 덧셈/뺄셈 순이고 동일 순서에서는 좌에서 우로 진행한다.
 
 
 

* 스칼라 타입 - 스트링(String)


 
문자열 표현으로 파이썬에서의 타입 이름은 str이다.
작은 따옴표('), 큰 따옴표(") 모두 사용 할 수 있는데 작은 따옴표(')로 시작한 문자열은 반드시 작은 따옴표(')로 끝나야 하고 중간에 작은 따옴표(')를 문자열로 표현할 때는 \'와 같이 Escape한다. 그렇지만 중간에 큰 따옴표가 올 때는 Escape할 필요가 없다. 이 표현법은 큰 따옴표(")에도 동일하게 적용한다. r'  '의 방식으로 Raw 스트링을 기술할 수 있는데 r다음의 스트링을 Escape하지 않고 기술한 그대로 처리하기 위한 방식이다.
인접한 스트링은 하나의 스트링으로 간주한다. 예를 들어 "aa" "bb" "cc"로 기술하면 "aabbcc"와 동일 효과를 낸다.
여러줄에 걸친 스트링을 표현할 경우에는 따옴표를 3개 붙인 ''' 또는 """를 사용해서 표현할 수 있다. 아래는 그 사용 예이다.
# -*- coding: cp949 -*-
va='국어'
print va
va='Mother\'s egg'
print va
va="""국어를 사랑하자
그러자. 안녕!"""
print va
va="철수가 \"안녕\"이라고 말했다"
print va

>>> ================================ RESTART ================================
>>>
국어
Mother's egg
국어를 사랑하자
그러자. 안녕!
철수가 "안녕"이라고 말했다

 
 
문자열에 적용할 수 있는 연산자는 아래와 같다.
  • a+b 스트링 a뒤에 b를 연결한다(Concatenates). += 연산자도 사용할 수 있다.

>>> 'aaa'+"bbb"
'aaabbb'

  • a*i 스트링 a를 i회 반복한다. *= 연산자도 사용할 수 있다.

>>> 'abc' * 3
'abcabcabc'

  • len(a) 스트링 a의 길이 리턴
  • chr(n), ord(c) n으로 지정한 문자를 리턴하거나, 문자 c의 코드값을 리턴한다.
  • a in b 스트링 a가 스트링 b에 있으면 True 아니면 False를 리턴한다
  • a[i] 스트링 a의 i 위치에 있는 문자를 리턴한다. 위치는 0이 맨 앞 문자를 의미한다. i가 음수면 뒤 부터 거꾸로 위치를 지정하는데 맨뒤의 문자 위치는 -1이고 그 앞의 문자는 -2로 지정하는 방식이다. 주의할 것은 a[1]='a'처럼 개별 요소가 치환에 사용될 수는 없다. 이런 경우 잘라 붙이기로 새로운 스트링을 만들어야 한다.
  • a[i:j:k] 스트링 a의 i 위치 부터 j위치까지(j위치는 포함되지 않는다. 직전 위치의 문자까지만) k만큼씩 움직이며 문자를 추출한다. k가 음수면 역방향 진행을 의미한다. i를 생략하면 맨앞이란 의미이고, j를 생략하면 i의 반대편 맨끝을 의미하고 k를 생략하면 1을 의미한다.

>>> 'abcde'[0:5:1]
'abcde'
>>> 'abcde'[0:5:2]
'ace'
>>> 'abcde'[-1:-6:-1]
'edcba'
>>> 'abcde'[-1:-6:-2]
'eca'

  • a[::-1] 스트링 a를 거꾸로 뒤집는다. 위의 예에서  'abcde'[-1:-6:-1]과 동일한 효과를 간단하게 사용하는 방법이다.
  • a.split('sep') 스트링 a를 sep 기준으로 분리한 리스트를 리턴한다. 'sep'를 생략하면 White space를 제외한 단어들만으로 리스트를 생성한다.

>>> ' I am tom    !'.split(' ')
['', 'I', 'am', 'tom', '', '', '', '!']
>>> ' I am tom    !'.split('  ')
[' I am tom', '', '!']
위의 예를 보면 첫번째는 공백 1개, 두번째는 공백 2개로 split를 수행했는데 tom다음에 공백4개가 있는 것을 감안해 보면 분리자 sep 한개를 기준으로 원소가 분리됨을 확인할 수 있다.

  • a.partition('sep') 스트링을 sep기준으로 나누어 (sep 이전 스트링, sep, sep 이후 스트링)의 리스트를 리턴한다.
  • a.splitlines() 줄단위로 나눈 리스트를 리턴한다. 기본적으로는 라인 구분을 제거하는데 splitlines(True)로 지정하면 남긴다.
  • a.strip() 스트링 a의 양쪽에 있는 공백, 탭, 개행등의 White space를 제거한다. lstrip() 좌측 공백제거, rstrip() 우측 제거
  • a.center(w) w 길이로 a를 가운데 맞추고 양쪽에 공백으로 채운다. ljust(w), rjust(w) w길이로 a를 좌/우로 맞추고 나머지는 공백으로 채운다
  • a.upper() 대문자로 전환
  • a.lower() 소문자로 전환
  • a.title() 각 단어의 첫자만 대문자로하고 나머지는 소문자로 변환
  • a.isalnum(), a.isalpha(), a.isdigit(), a.islower(), a.isspace(), a.isupper() 스트링의 구성 검사. 맞으면 True 리턴
  • a.startswith(), a.endswith() 스트링이 지정한 스트링으로 시작하거나 끝나면 True 리턴
  • a.find(sub), a.index(sub) 스트링 a에서 sub를 찾아 인덱스를 리턴한다. 못찾으면 find는 -1을 리턴하고 index는 오류를 발생시킨다. rfind(), rindex()는 우측 부터 검색한다.
  • a.capitalize() 스트링 a의 첫문자만 대문자로하고 나머지는 소문자로 변환한다.

>>> 'aBBcc'.capitalize()
'Abbcc'

  • a.count(‘sub’) 스트링 a중에서 sub 가 몇번 나오는지 개수를 리턴한다.

>>> 'Go go go Fighting!'.count('go')
2
>>> 'Go go go Fighting!'.count('g')
4

  • a.replace(‘sub1’,’sub2’,n) 스트링 a에서 sub1을 찾아 sub2로 대치시킨다. n이 없으면 모든 sub1을 sub2로 바꾸고, n을 지정하면 n번만 바꾼다

>>> 'Go go go Fighting!'.replace('go', 'Go')
'Go Go Go Fighting!'
>>> 'Go go go Fighting!'.replace('go', 'Go', 1)
'Go Go go Fighting!'

 
 

* 스칼라 타입 - 논리(Boolean)


참과 거짓을 두가지 값만을 가지는 타입으로 타입 이름은 bool 이다.
파이썬에서는 True와 False라는(대소문자 주의) 특별한 값을 제공한다.
>>> 7 == 7
True
>>> 7 == 8
False
>>> a = 7==7
>>> type (a)
<type 'bool'>
>>> print a
True

 
 
bool 타입과 연관된 논리 연산자는 True 또는 False만을 리턴하며 그 내역은 아래와 같다.

  • == 양쪽이 같으면 True. = 하나는 대입 또는 치환을 의미하므로 주의한다
  • <, <= 우측 보다 작으면, 작거나 같으면 True
  • >, >=  우측 보다 크면, 크거나 같으면 True
  • a<b<c 복합 조건으로 다른 언어에서는 and로 묶어서 처리해야 했으나, 파이썬에서 간편하게 기술하면서도 프로그램을 읽기쉽도록 했다.

>>> 1 < 3 <= 7
True
>>> 3 < 3 <= 7
False
>>> 1 < 3 <= 7 < 9
True

  • !=, <> 양쪽이 다르면 True. 파이썬에서는 두가지를 모두 사용할 수 있다.

>>> 1 != 3
True
>>> 1 != 1
False
>>> 1 <> 1
False

  • and 양쪽이 모두 True 이면 True.
  • or 둘중에 하나만 True 이면 True
  • not 우측 bool 값을 반대로. True면 False. False면 True
  • a is b a와 b 동일한 메모리를 참조하고 있으면 True를 리턴한다. 스칼라 타입은 값이 같다면 동일한 메모리를 참조하지만, 리스트의 경우에는 값이 같이 보여도 각각 따로 저장하고 변수를 참조하는 경우만 동일한 메모리를 참조한다.

>>> a = 10
>>> a is 10
True
>>> a = 'aaa'
>>> a is 'aaa'
True
>>> a = (1,2,3)
>>> a is (1,2,3)
False
>>> b = a
>>> b
(1, 2, 3)
>>> b is a
True


 
파이썬에서 논리 연산자를 사용할 때는 연산 대상이 bool 타입이어야 하지만 C언어에서 처럼 0이 아닌 값은 모두 True로 처리한다. 아래는 그 사용 예인데 스트링의 경우 널이("") 아닌 경우는 모두 True임을 확인할 수 있다. 파이썬에서 False 인경우를 나열하면 False, 0, None, '', "", (), [], {} 등이 있다. 이들은 모두 False로 처리된다.
>>> if 0 : print "true"
else : print "false"

false
>>> if "0" : print "true"
else : print "false"

true
>>> if 1 : print "true"
else : print "false"

true
>>> if "" : print "true"
else : print "false"

false

   
단, and와 or 연산자는 항상 True와 False 값만 리턴하지 않는다. 좌에서 우로 비교해 가는데 최종 비교 대상 값을 그대로 리턴한다. 예를 들어 a and b에서 a가 False로 판단되면 a값 그대로를 리턴한다. a or b에서 a가 True라면 b를 볼필요가 없으므로 a 값을 그대로 리턴한다. 이것을 문장에 응용한 예가 있는데 아래의 예를 보면 a가 0인 상태로 나눗셈을 하면 "ZeroDivisionError"가 발생한다. 그런데 and 연산자 앞에 a가 0이 아닌지를 확인하는 코드를 삽입하여 a가 0이면 False를 리턴하고 우측은 비교할 필요가 없으므로 나눗셈을 하지 않는다. 0이 아니라면 나눗셈 결과를 그대로 리턴한다.  
사용자 삽입 이미지



 

* 배열(Array)


여러 원소를 하나의 묶음으로 관리하고 각 원소간에는 순서(order)가 존재하여 인덱스(Index)를 통해 접근하는 리스트로 파이썬에서는 두가지 타입이 있다. 각 원소의 타입은 동일하지 않아도 되고 다른 배열을 원소로 갖는 것도 허용된다. 배열간의 비교는 동일 인덱스 끼리 각각 비교해 가는 방식으로 적용된다.
  • list [1, 2, 3] 형태로 정의하며 각 원소를 수정할 수 있다. []는 빈 list를 의미한다.

>>> b = [1,"aa",3,4,5]
>>> type (b)
<type 'list'>


  • tuple (1, 2, 3) 형태로 정의하며 한번 정의한 원소를 수정할 수 없다. 튜플원소에 대한 수정 작업은 "TypeError: 'tuple' object does not support item assignment" 같은 오류를 발생시킨다. 원소 추가/삭제도 불가하다. ()는 빈 tuple을 의미한다. 원소를 교체하거나 추가 하는 등의 작업은 새로운 튜플을 생성하는 방법으로만 가능하다. 아래의 예에서는 첫원소를 대문자 'A'바꾼 새로운 배열로 교체했다.
원소가 하나만 있는 tuple은 괄호와 구분이 되지 않기 때문에 ('A',)와 같이 기술하면 tuple임을 명시할 수 있다.

>>> b = ( 1, "aa", [3, 4, 5], 6, 7)
>>> type (b)
<type 'tuple'>
>>> t = ('a', 'b', 'c', 'd', 'e')
>>> t = ('A',) + t[1:]
>>> t
('A', 'b', 'c', 'd', 'e')

 
배열 내부에 또다른 배열을 갖는 경우 해당 원소에 대한 접근은 b[2][0]같은 방식으로 지정한다. 배열 내부에 이미 정의한 다른 배열 변수를 포함시키면 포함된 배열을 참조하는 형태로 관리되어 포함된 배열을 수정하면 포함한 상위 배열도 같은 내용을 보게 된다. 아래 예제를 보면 a 배열이 b 배열을 포함했는데, b[2][0]을 'test'로 변경했을때 a배열에도 동일 내용이 반영되는 것을 확인할 수 있다.
>>> print b
(1, 'aa', [3, 4, 5], 6, 7)
>>> print b[2]
[3, 4, 5]
>>> print b[2][0]

>>> a = [3, b, 'aaa']
>>> print a
[3, (1, 'aa', [3, 4, 5], 6, 7), 'aaa']
>>> b[2][0] = 'test'
>>> print a
[3, (1, 'aa', ['test', 4, 5], 6, 7), 'aaa']

 
 
아래는 배열과 연관된 연산들이다. 주의할 것은 배열 자체에 연산을 수행하고 리턴값이 없는 함수가 있다는 점이다.(None 타입)
  • A.append(obj) 배열 맨 원소로 obj를 추가한다. None type.
  • A + B 배열 A와 B를 연결하여 새로운 배열을 리턴한다. 단 A/B가 동일한 list 또는 tuple 타입이어야 한다 += 연산자도 사용할 수 있다.
  • A * i 배열 A를 i회 반복하여 새로운 배열을 리턴한다. *= 연산자도 사용할 수 있다.
  • A.extend(list) list로 입력한 리스트를 배열 맨뒤에 붙인다. 파라미터는 리스트만 허용. None type.
  • A.insert(index,obj) index로 지정한 위치에 새로운 원소로 obj를 삽입하고 나머지는 우측으로 이동시킨다. None type.
  • del A[index] index로 지정한 위치의 원소를 제거하고 나머지를 좌측으로 이동시킨다. del A[i:j]와 같이  범위 지정으로 삭제도 가능하다.
  • A.pop(index) index로 지정한 위치의 원소를 리턴 및 제거하고 나머지를 좌측으로 이동시킨다

>>> a
[1, 2, 3, 4, 9, 8, 7]
>>> print a.pop(3)
4
>>> a
[1, 2, 3, 9, 8, 7]
>>> a.remove(9)
>>> a
[1, 2, 3, 8, 7]

    • A.remove(obj) 배열에서 obj로 지정한 내용과 동일한 첫 항목을 찾아 삭제하고 나머지를 좌측으로 이동시킨다.  None type.
  • A.reverse() 배열의 순서를 뒤집는다. A[::-1]과 동일한 효과.  None type.
  • A.sort() 배열을 오름차순으로 정렬한다. t.sort(reverse=True) 내림차순 정렬.  None type.
  • A.index(obj) 배열에서 obj로 지정한 내용과 동일한 첫 항목을 찾아 그 인덱스를 리턴한다. 찾지 못하면 오류 출력
  • A.count(obj) 배열에서 obj로 지정한 내용과 동일한 항목을 찾아 그 개수를 리턴한다.
  • len(A) 항목의 개수 리턴
  • range(i, j) i 부터 j 까지(j는 포함않됨)의 정수 등을 list 타입으로 리턴한다. range(j)는 range(0, j)의 의미로 사용한다. range(i,j,k) 형태로도 사용할 수 있다.
  • A[i:j:k] 배열의 i 위치 부터 j위치까지(j위치는 포함되지 않는다. 직전 위치의 항목까지만) k만큼씩 움직이며 각 원소를 추출하여 새로운 배열을 리턴한다. k가 음수면 역방향 진행을 의미한다. i를 생략하면 맨앞이란 의미이고, j를 생략하면 i의 반대편 맨끝을 의미하고 k를 생략하면 1을 의미한다. 스트링에 대한 처리와 유사하다.
  • ''.join(A) 배열 A의 모든 원소를 하나의 스트링으로 합쳐서 리턴한다. 단, 배열의 모든 원소가 스트링일때만 가능하고 다른 타입이 섞여있으면 오류를 발생시킨다. join 앞에 널 스트링이 아닌 값을 지정하면 해당 스트링으로 각 항목들을 붙인다.

>>> a = ('a','b','c')
>>> ''.join(a)
'abc'
>>> '=='.join(a)
'a==b==c'

  • a.split('sep') 스트링 a를 sep 기준으로 분리한 리스트를 리턴한다. 'sep'를 생략하면 White space를 제외한 단어들만으로 리스트를 생성한다.
  • list(a), tuple(a) 스트링 a에 있는 모든 문자를 각각 분리한 list 또는 tuple을 리턴한다. list(), tuple()는 빈 배열 리턴
  • obj in A obj로 지정한 항목이 배열에 존재하면 True를 리턴한다
  • sum(A) 배열 A의 모든 항목을 더한 결과를 리턴한다. 단, 모든 항목이 숫자 항목이어야 한다.
  • max(A), min(A) 배열중에서 가장 큰, 가장 작은 항목을 리턴한다.
  • all(A) 배열내 모든 원소가 True이면 True 리턴
  • any(A) 배열 A가 빈 배열이 아니면 True
  • divmod(a, b) a를 b로 나눈 몫과 나머지로 구성된 tuple을 리턴한다.


>>> print divmod(10,3)
(3, 1)
>>> type(divmod(10,3))
<type 'tuple'>

  • zip(A, B,...) 인수로 지정된 배열 또는 스트링(문자가 개별 항목으로 취급됨)의 각 원소들을 원소개수가 가장 작은 것을 기준으로 동일 인덱스로 묶어 새로운 배열을 리턴한다.

>>> zip([1,2,3],('a','b','c'),['qqq','rrr'],"222222")
[(1, 'a', 'qqq', '2'), (2, 'b', 'rrr', '2')]


 
 
 

* 사전(Dictionary)


list나 tuple 타입에서 각 원소는 정수 인덱스로 접근했으나 사전에는 키로 접근할 수 있는 리스트 타입이다. 사전은 {키:값, 키:값...}의 방식으로 선언한다. 사전 타입의 타입명은 dict인데 dict()함수로 리스트를 사전으로 만들수도 있다. dict 로 전달할 인수는 키,값 쌍으로 구성한 리스트들을 원소로한 리스트를 넘겨주면 된다. 예제처럼 zip 함수로 키 리스트와 값 리스트 두개로 사전 배열을 작성할 수도 있다. {}는 빈 사전을 의미한다. 키는 스트링을 비롯한 어떠한 타입으로도 가능하다. 아래의 예제 처럼 배열을 키로 가질 수도 있다. 또한, 사전은 내부적으로 해시 테이블을 사용하기 때문에 사용자가 입력한 순서로 저장하는 것이 아니다. 항목간 순서가 존재하지 않는다.
 
>>> a={"a":"kor", 'b':'eng', 10:'jpn'}
>>> a
{'a': 'kor', 10: 'jpn', 'b': 'eng'}
>>> a = dict([["a","kor"], ['b','eng'], [10,'jpn']])
>>> a
{'a': 'kor', 10: 'jpn', 'b': 'eng'}
>>> a = dict(zip(["a",'b',10], ["kor", 'eng', 'jpn']))
>>> a
{'a': 'kor', 10: 'jpn', 'b': 'eng'}
>>>dice = { (1,1): "snake eyes", (6,6): "box cars" }
>>>dice
{(1, 1): 'snake eyes', (6, 6): 'box cars'}
>>>dice[(1,1)]
'snake eyes'

 
사전에의 접근은 A[키]같은 방식으로 리스트의 인덱스 대신 키 값을 사용하면 된다. 그렇지만 지정한 키가 없을 때는 "KeyError:"를 발생시킨다. 이런 오류를 예방하는 방법은 A.get(키) 함수를 사용하면 된다. get 함수는 해당하는 키가 없어도 오류를 발생시키지 않는다. get의 두번째 인수에 메시지를 전달하면 키가 없을때의 조치를 취할 수 있다.
>>> a['a']
'kor'
>>> a['c']

Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    a['c']
KeyError: 'c'
>>> a.get('a')
'kor'
>>> a.get('c')
>>> a.get('c', "c is not key!")
'c is not key!'

 
리스트의 경우에 항목이 없는 인덱스로 배열을 접근하면 오류가 발생하지만 사전의 경우에는 존재하지 않는 키에 값을 할당하면 바로 항목이 추가된다.
>>> a
{'a': 'kor', 10: 'jpn', 'b': 'eng'}
>>> a[100]='ddd'
>>> a
{'a': 'kor', 10: 'jpn', 'b': 'eng', 100: 'ddd'}

 
 
사전에 쓰이는 연산은 리스트와 유사하지만 몇가지 차이가 있는 것은 아래와 같다.
  • len(A) 키-값 쌍의 개수를 리턴한다.
  • A.keys() 사전의 키들을 리스트로 리턴한다.
  • A.values() 사전의 값들을 리스트로 리턴한다.
  • A.items() 키,값 쌍으로 구성한 리스트들을 원소로한 리스트를 리턴한다.
  • A.get(키, 메시지) 키에 해당하는 값을 리턴한다. 없으면 두번째 인수 리턴
  • A.has_key(키) 키가 존재하면 True 리턴
  • 키 in A 사전에 지정한 키가 존재하면 True 리턴
  • A.clear() 사전의 모든 원소를 삭제
  • A.copy() A와 동일한 새로운 사전을 생성하여 리턴한다
  • A.setdefault(키, 기본값) get()과 유사하다. 지정한 키가 있으면 해당 값을 리턴하고, 없으면 해당 키를 추가하면서 기본값을 리턴한다.
  • A.update(B) 사전 B의 내용으로 A를 갱신한다. 삭제는 하지않고 수정과 추가만 처리한다.


>>> b
{'a': 'kor', 'b': 'eng', 100: 'ddd', 10: 'xxx', 'x': None, 'z': 'qqq'}
>>> a
{'a': 'kor', 10: 'jpn', 'b': 'eng', 100: 'ddd'}
>>> a.update(b)
>>> a
{'a': 'kor', 'b': 'eng', 100: 'ddd', 10: 'xxx', 'x': None, 'z': 'qqq'}

 
   
지금까지 파이썬의 변수와 스칼라 및 리스트 타입을 살펴 보았는데, 어떤 부분은 C언어의 장점을 가져 왔고 사전의 경우에는 PHP나 JavaScript에서 편리하게 사용했던 것이 들어 왔고 내장함수와 메소드를 통해서 타 언어에서는 복잡하게 처리해야할 로직이 아주 간단하게 될 수 있겠다는 생각이 든다. 구글의 검색 엔진에서 왜 파이썬을 쓰게 되었는지 공감이 되는 부분이다. 계속되는 스터디가 나름 기대된다.

출처: http://www.dongwun.com/tc/146
[본문링크] 파이썬의 변수와 타입 - 파이썬(Python) 배우기
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=34444
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.