카테고리 없음
Python 간단 정리
오늘보다 나은 내일
2014. 2. 18. 13:17
설치와 실행부터 해서 네트워크까지 심플하게 정리
출처 : http://aroundck.tistory.com/98
설치와 실행
1. 다운로드 : http://python.org
2. 설치 : msi 파일을 실행시키기고 대부분 Default 설정으로 Next.
3. 실행 : <시작> - <프로그램> - <Python (Ver)> - Python(Command Line) 으로..
변수선언
watch = 10000 ( type 선언이 따로 필요 없습니다. 물론 type 을 명시할 수도 있습니다. Script 언어들의 특징이기도 하죠.. )
a = 'pig' ( 따옴표( single quotation mark )는 string 을 얘기합니다. 따옴표가 없으면 일반 변수로 인식합니다. )
전역변수 선언은 global a 이런 식으로. ( 파이썬도 지역변수와 전역변수가 있습니다. 스크립트 언어라 무시하지 마세용~ )
배열
family = ['father', 'mother', 'I', 'sister'] ( 배열은 접속은 당연히 family[index] 로 합니다. 값 정의는 '{' 가 아닌 '[' 이군요. )
len(family) : 배열의 길이 보여줌.
family[3] ( 결과는 'sister', index 다른 언어와 마찬가지로 0부터 )
family.remove('I')
cf) string도 엄밀히 말하면 char 배열로 볼 수 있으니 단순히 len('abc') 이렇게 해서 3 값을 얻을 수 있다.
기본 입/출력
화면 출력 : print 'string', 'string2', 'string3' 이런식
변수에 key 입력받기 : d = 자료형(raw_input( "Input here : " )) - 자료형은 생략가능, 보통 String 값으로 받음.
raw_input() 키보드 입력 받기 ( 커서가 입력을 기다림 )
저장과 실행
저장 : 파이톤 파일은 .py 확장자로 저장한다.
실행 : python 폴더에서 python [디렉토리/파일명.py] 로 실행한다.
반복문
while 문 :
while 조건: // (콜론이 꼭 있어야 함)
while 조건: // (콜론이 꼭 있어야 함)
// do sth (반드시 Tab 으로 들여쓰기 해야 함)
if 문 :
if 조건: // (여기도 콜론!!)
// do sth ( 여기도 tab )
elif: (else if 가 아니네??)
// do sth
else:
// do sth
for 문 :
for x in 변수: ( x에 변수를 하나씩 넣으면서 실행하라, 변수는 array 형이 되겠죠? )
for x in 변수: ( x에 변수를 하나씩 넣으면서 실행하라, 변수는 array 형이 되겠죠? )
// do sth (tab)
변수는 보통 배열. range( constant ) 를 통해 0부터 constant 까지를 포함한 배열을 생성한다.
즉 range(3) 하면 0,1,2 loop를 돈다, range(4,8) 하면 4, 5, 6, 7 배열이 나온다.
함수.
정의 : def 함수명(parameter):
내용물(tab)
재귀함수도 가능!
return은 따로 명시할 필요 없이 그냥 마지막에 return 해주면 된다. ( 특이한 친구일세.. )
Boolean
참과 거짓은 참 : 1 거짓 : 0 으로 표시
Conversion
다른 것과 마찬가지로 int(변수) 이런식이면 만족.
[참고 : Lambda 함수]
더보기
자료형
type('A') : A 의 자료형을 출력해준다. (이놈은 complex 도 읽는다. 3+4j 이런거)
- 수치형 (Number)
- 순서형 (Sequence)
- 매핑형 (Mapping)
문자열과 리스트
a = 'banana'
a[2:4] 결과는 na (2,3 index 를 출력해준다.)
문자열의 한 글자만 인위적으로 바꿀 순 없다. (a[0] = n XXXXXXX 땡~~~)
then how? a = 'n' + a[1:] 요렇게!!
b = [2, 3, 5, 7]
b.append(10) : 추가
b.sort() : 정렬
del b[3] : index 3 삭제
b[2] = 11 : String과는 다르게 교체 가능하다.
리스트 안에 리스트도 가능
order = [3, [3 5 7], 7]
접속은 order[1][2] 결과값은 7 (호오 좋다~~)
튜플 (Tuple, 집합?)
c = 10
d = 20
c, d = d, c
이렇게 temp 를 거치지 않고 한번에 바꿀 수 있다. 이 때 c,d / d,c 를 튜플이라 부른다.
또, def magu_print( x, y, *rest ): (*이 튜플로 만들라는 표시랍니다.)
magu_print x, y, rest
를 해주면 parameter가 2개이상 일 때, 나머지 녀석들이 다 rest 로 속하게 됩니다. 이것들도 튜플이라 부른다.
생성은 () 를 통해 합니다.
empty = ()
t = ('a', 'b', 'c')
one = 5, (콤마가 꼭 있어야 한다.)
이것도 문자열처럼 한개씩 수정은 불가능해져서, 다른 방법으로 해야 합니다.
튜플과 list 는 서로 전환도 무지 쉽다.
p = tuple
q = list(p) ( 이게 conversion 이 땡이야? 검나 쉽다!! )
r = tuple(q) (이것도 conversion)
Dictionary (자료를 엄청 빨리 찾을 수 있다. 배열은 하나하나 비교해야 하지만 여긴..)
정의는 {} 로. ex) dic = {}
추가는 ex) dic['dictionary'] = '1. ~~~' (여기서 dic~은 key 값. 1~은 value 값)
찾기는 ex) dic['dictionary']
한꺼번에 하기는 ex) smalldic = {'dictionary' : 'reference', 'python' : 'snake'}
삭제는 ex) del dic['dictionary']
키 유무 확인 ex) dic.has_key('python') 결과값은 당연히 1 또는 0
Stack. (LIFO) / Queue (FIFO)
cf) dir(자료형) 하면 자료형에 적용 가능한 함수들이 나옴.
list.append(값)
list.pop() - 가장 마지막에 들어간 걸 빼줌
list.pop(index) - index에 해당하는 위치의 값을 빼줌. (index가 0이면 queue지)
cf) print '*' * 50 하면 * 50개를 찍는다. 호오~
모듈 (Module)
- import math (math 모듈 부르기) ex) math.pi
- import calendar (calendar 모듈) ex) calendar.prmonth(2009,3)
- from 모듈 import 변수나 함수 (이렇게 하는 이유는, 가끔 변수명이나 함수명이 중복되어 앞선거 삭제 할 수 있기 때문이다.)
-모듈은 python directory 에 lib 폴더에 있다.
넣고 싶은 변수와 함수들을 py 파일 형태로 해서 넣어두면 사용 가능하다.
-모듈 export 하기는
del 모듈 로.
-모듈 reimport 하기는
reload(모듈) 로.
- sys 모듈 : interpreter를 제어
ex) impoty sys
sys.ps1
sys.ps1 = 'GG>' 그럼 프롬프트가 >>> 에서 GG> 로 바뀜.
sys.ps1
sys.ps1 = 'GG>' 그럼 프롬프트가 >>> 에서 GG> 로 바뀜.
ex) sys.exit() (종료)
- OS 모듈 : operating system 제어
ex) impoty os
os.getcwd() (현재 작업 디렉토리)
os.getcwd() (현재 작업 디렉토리)
os.listdir(디렉토리) (디렉토리 안의 파일 이름들)
os.rename(파일이름, 바꿀 파일이름) (rename)
- String 모듈
ex) import string
string.capitalize('python') (대문자화)
string.capitalize('python') (대문자화)
string.replace('simple', 'i', 'a') (안에 있는 i를 a로 바꿈)
string.split ('break into words') (공백 기준으로 문자열을 나눔)
- re 모듈 (regular expression 이라 해서 string보다 전문적인 문자열 콘트롤)
ex) import re, glob
p = re.compile('.*p.*n.*') (p~n~)인 string을 찾는다.
p = re.compile('.*p.*n.*') (p~n~)인 string을 찾는다.
for i in glob.glob('*'):
m = p.match(i)
if m:
print m.group()
(. 은 아무 문자 한개, * 은 한개 이상 문자)
cf) glob 모듈..
ex) import glob
glob.glob('*.*') (모든 파일 표시 list로 만듬)
glob.glob('*.txt')
glob.glob('*.*') (모든 파일 표시 list로 만듬)
glob.glob('*.txt')
cf) os.path.isdir(x) : x가 디렉토리인지 아닌지 판별.
- webbrowser 모듈
ex) import webbrowser
url ='http://home.hanmir.com/~johnsonj/'
webbrowser.open(url)
- random 모듈
ex) import random
random.random() (0~1 사이의 숫자 하나 뽑음 (1포함 X))
random.random() (0~1 사이의 숫자 하나 뽑음 (1포함 X))
random.randrange(1,7) 은 1~6 사이.
random.shuffle(순서형 자료) 는 순서형 자료를 random으로 섞음.
random.choice(순서형 자료) 는 순서형 자료에서 random으로 하나 choice
파일 입출력
- 입력
f = open(디렉토리)
f.read() (읽어서 바로 출력해준다. enter 가 \n 로 나온다.)
buffer = f.read()
print buffer 로 해주면 정상출력
print buffer 로 해주면 정상출력
f.readline() (한줄씩 읽기) - readline() 으로 읽은것 출력할때 마지막에 , 찍어줘야 2줄씩 출력하지 않음.
f.readlines() (여러줄 읽기 리스트로 저장)
sys.stdout.writelines(파라미터) - 파라미터 값을 출력해준다.
- 출력
f = open(디렉토리, 'w') (writing 버전)
(f = open(디렉토리, 'a+') (추가 버전))
f.write('Dear Father,')
f.close()
import pickle
pickle.dump(변수나 리스트 류, f)
그 변수나 리스트 값이 파일로 저장 (not straight, a little modified version)
반대로 불러오는 것은
a = pickle.load(f)
이 피클을 이용하면 파이썬에서 만들어지는 모든 것을 파일에 넣을 수 있다고 한다.
와!! 진짜 간단하다 ㅋㅋ
Class
- 마찬가지로 정의는 class 클래스명:
- instance 만드는건 쫌 특이하게.. 인스탄스이름 = 클래스명() 으로 만든다.
cf) class 정의 시에는 ()안에 self 를 넣어준다. 자기 자신의 다른 함수 이용을 위해서 (this 같은거)
cf) sys.path.append(디렉토리) path 디렉토리를 추가설정할 수 있다. (모듈부를때..)
- 내용물이 없는 class를 만들땐, 내용에 "pass"만 써주면 된다.
- 상속은 class 정의할때, class 클래스명(mother class명): 으로 한다. (무지 쉽네 ;;)
- __init__ method (초기화) : constructor 처럼 객체 생성될때 자동실행되는 것.
- __del__ method (소멸자) : destructor로 반대로 instance 소멸할때 자동 실행.
- __repr__ method (프린팅) : 프린팅으로 객체를 불렀을때 자동 실행 (toString() 같은거)
- __add__ method (덧셈) : 객체를 덧셈했을때 자동 실행
- __sub__ method
- __cmp__ method (비교)
예외
- try catch 가 아니라 try except 네.. 거기다가 : (콜론)은 잊지 말아야지 ㅎ
GUI (마우스 이벤트 처리)
- Tkinter 모듈을 사용하여 GUI 구현한다.
- event 처리는 함수의 parameter 부분에 event 를 넣어준다.
- 위치를 숫자로 나타내주는 것은 callback() 함수가 함.
- <Button-1> 은 왼쪽 버튼을 말함.
ex) from Tkinter import *
root = Tk()
def callback(event)
print "clickded at", evet.x, event.y
frame = Frame(root, width=100, height = 100)
frame.bind("<button-1>", callback)
frame.pack()
root.mainloop()
ext) from Tkinter import *
root = Tk()
canvas = Canvas(root, width=300, height=300)
def callback(event):
canvas.create_oval(event.x, event.y, event.x+1, event.y+1)
canvas.bind("<Button-1>",callback)
canvas.bind("<B1-Motion>",callback)
canvas.pack()
root.mainloop()
ex) from Tkinter import *
root = Tk()
canvas = Canvas(root, width=300, height=300)
def draw(event):
global x0, y0
canvas.create_line(x0, y0, event.x, event.y)
x0, y0 = event.x, event.y
def down(event):
global x0, y0
x0, y0 = event.x, event.y
def up(event):
global x0, y0
if (x0, y0) == (event.x, event.y):
canvas.create_line(x0, y0, x0+1, y0+1)
canvas.bind("<B1-Motion>", draw)
canvas.bind("<Button-1>", down)
canvas.bind("<ButtonRelease-1>", up)
canvas.pack()
root.mainloop()
네트워크
- #! 주소 : 인터프리터 지정.(아파치 써버 등에서 인식)
- urllib 모듈
- httplib 모듈