Python Study 01
node.js만 하다보니 다른 랭귀지를 전혀 못보는 까막눈이 되어 다른 랭귀지도 공부하고 알고리즘도 다시 볼겸 책을 사서 공부하기로 시작했다.
책 제목은 <파이썬으로 배우는="" 실전="" 알고리즘="">파이썬으로>
ch 01 python summary
파이썬의 자료형은 type() 함수를 통해 알 수 있다.
- int
>>> a = 3
>>> print type(a)
<type 'int'>
- float
>>> a = 3.14
>>> print type(a)
<type 'float'>
- str
>>> a = 'hellp'
>>> print type(a)
<type 'str'>
- int는 32비트, long은 대부분을 저장할 수 있다.
2의 보수
주어진 2진수보다 한 자리 높되 첫 자리만 1이며 나머지는 모든 0인 수에서 주어진 수를 빼었을때 나오는 수를 의미한다.
divmod(a, b)
다음의 tuple 값을 리턴한다. (a를 b로 나눈 값, a를 b로 나눈 나머지)
부동 소수점
내부적으로 x = +m2^e or x = -m2^e 로 나타낸다고 한다. 이때 m을 가수 2를 밑수, e를 지수라 한다.
가수는 [1,2) 혹은 0의 값을 갖는다.
예를 들어 0.5를 위 표현식으로 한다면 1 * 2 ^ -1 이다.
지수 차이로 인한 비트 이동으로 인해 계산 값이 달라질 수 있다. 따라서 정확한 계산을 위해서 Decimal모듈을 이용하여 계산한다.
복소수
허수 부분을 j로 이용해서 나타낼 수 있다.
a=1+2j
문자열
ASCII문자열과 유니코드 문자열을 지원한다.
“”” “"”은 여러줄을 감싼다. es6의 ``와 같다.
'a'
"a"
'''a'''
"""afdsa
fsdf
bs"""
ASCII을 unicode로 인코딩할 수 도 있다.
str = 'This is ASCII'
uni = str.encode('utf8')
unicoe는 ASCII의 상위 집합이다.
문자열을 나타날때 str, repr이 있는데 현재로서는 안봐도 될거 같다.
Array & List
둘이 비슷하다.
>>> a = [1,2,3]
>>> print type(a)
<type 'list'>
- append(x)
리스트의 맨 끝에 x를 추가한다. - insert(i, x)
리스트의 i번째 위치에 x를 추가한다. - del list[idx]
리스트의 idx 요소를 삭제한다. - len(list)
리스트의 element 개수를 돌려준다. - reverse()
리스트의 element 정렬을 반대로 한다. - count(x)
리스트의 x의 개수를 돌려준다. - index(x)
리스트내 첫 번째 x의 index를 돌려준다. - list[a:b]
리스트의 a index부터 b index 전까지를 돌려준다. a 혹은 b 중 하나가 없다면 최소 index, 최대 index를 사용한다. - list + list
두 개의 리스트를 연결한다. - sort()
리스트를 정렬한다. ASC이다.
반복문에서 사용 가능하다.
array는 다음을 통해 사용가능하다.
from array import array
배열은 모든 항목이 같은 자료형이어야 한다.
>>> from array import array
>>> b = array('d', [1,2,3,4,5])
>>> b.append('c')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: a float is required
array(자료형, [])로 생성한다.
자료형은 ‘d’, ‘l’, ‘f’, ‘c’등이 가능하다. 각 자료형의 앞글자이다.
리스트 보다 배열이 더 빠르다고 한다.
Tuple
튜플은 리스트와 비슷한데 크기와 항목 변경이 불가한 녀석이다.
다음과 같이 선언 가능하다.
>>> a = 1,2,3
>>> a = (1,2,3)
>>> a = ()
다만 element가 하나이면 tuple로 생성되지 않는다. 이럴때는 아래와 같이 하면 된다.
>>> a = (1,)
tuple도 반복문에서 사용이 가능하다.
Dictionary
사전은 key-value 객체이다. key는 튜플, 숫자, 문자열이 될 수 있다.
아래를 이용해 key 존재 여부를 검사한다.
a = {'key': 1}
>>> 'key' in a
True
- keys()
해시의 모든 키를 리턴한다. - values()
해시의 모든 값을 리턴한다. - items()
해시내 키 배열을 튜플로 해서 리스트를 리턴한다. - update()
새로운 key, value를 추가하거나 update(key=value)를 통해 key의 value를 업데이트할 수 있다. - del hash[key]
해당 key를 삭제한다.
key는 해시가 가능해야 한다.
Set
set은 순서가 없으며 중복이 없다.
>>> s = set([1,2,3])
- add(n)
set에 n을 추가한다. - union(set) 인수 set과 합집합을 구한다.
- intersection(set)
인수 set과 교집합을 구한다. - difference(set) 인수 set에 대한 차집합을 구한다.
Control statement
제어문뒤에 :을 쓰고 다음 행에서 들여쓰기를 하여 제어문 안에 있음을 표현한다.
i = 0
while i < 3:
print i
do while은 지원하지 않는다.
a = [0, 1, 'hello']
for i in a:
print i
range(s, e, a)는 s부터 e전까지의 a(기본 1)만큼 증가하는 정수 리스트를 만들어낸다.
arguement가 하나인 경우에는 0부터 해당 값 전까지를 돌려준다.
a = range(0,5)
for i in a:
print a
enumerate는 arguement의 (idx, value) 튜플을 생성한다.
a = ['a', 'b', 0, 1]
for (i, j) in enumerate(a):
print i, j
다른 언어들 처럼 반복문 내에서 continue와 break도 사용가능하다.
else if를 elif로 쓴다는 것만 빼면 다른 언어와 같다.
||는 or, &&는 and 로 표현가능하다.
for i in range(3):
if i == 0:
print 'zero'
elif i == 1:
print 'one'
else:
print' other'
try catch
exception을 잡을 부분을 try 로 감싸고 exception 처리 부분을 선언하고 항상 호출될 부분은 finally에 선언한다.
try:
a = 1/0
except Exception, e:
print 'oops: %s' % e
else:
print 'no problem'
finally:
print 'done'
에러도 여러 종류가 있다.
상위 Error는 Exception이 있고 그 아래 SyntaxError, ValueError 등이 있다.
Function
함수는 def로 선언한다.
def func():
return 1
아래는 기본 값을 갖는 함수이다.
def sum(a, b=4):
return a+b
상황에 따른 인수개수 조절도 가능하다.
*는 고정된 인수이외에 값이 전달되면 받는 부분이고 **는 이름이 지정된 식별자 값이 전달된 경우를 의미하며 맨 마지막에 선언되어야 한다.
Lambda
람다는 이름없는 함수를 정의할 수 있다.
lambda [a]:[b]는 인수는 a이고 b를 반환하는 함수를 정의하는 것이다.
a = lambda b: b+2
Class
다음과 같이 정의하며 생성할 수 있다.
class ItsClass(object):
pass
thatclass = ItsClass()
생성자를 통해서 인스턴스 반환한다. arg의 object는 이 클래스가 object를 확장하고 있음을 의미한다.
class에는 method내에 선언된 지역 변수, method 밖에서 선언된 클래스 변수가 있다.
또한 class에는 예약된 메소드들이 있다.
-
- init
- 생성자이다. class내의 method의 모든 첫번째 arg는 self로 시작한다.
-
- add
- 예약된 method이다. +에 대해 overload한다.A + B에서 self를 A로 other를 B로 취급한다.
-
- len
- object의 길이를 출력한다. len(ClassName) 으로 호출한다.
-
- getitem
- class[key]를 통해 값을 가져올 수 있게끔 한다.
-
- setitem
- class[key] = value를 통해 값을 저장할 수 있게 한다.
-
- sub
-
- 연산자에 대해 overloading한다.
-
- mul
-
- 연산자에 대해 overloading한다.
-
- div
- / 연산자에 대해 overloading한다.
File I/O
file write
file = open('filepath', 'w')
file.write('contents')
file.close()
file read
file = open('filepath', 'r')
print file.read()
file.close()
close()를 해주어야함을 잊지 말아야 한다.
import module
일반적으로 다음과 같이 불러온다.
import datetime
모듈 내 특정 함수를 import할 수도 있다.
from datetime import date
from random import * #random내의 함수를 전부 다 현재 namespace로 가져온다.
as를 이용하여 이름을 변경할 수 도 있다.
import random as rand