본문 바로가기
프로그래밍 놀이터/Web

[Python/파이썬] 파이썬 맛보기. ( 기초 강좌 정리 )

by 돼지왕왕돼지 2012. 2. 3.

안녕하세요 돼지왕왕돼지입니다.
오늘은 Script 언어 중 하나인 파이썬에 대한 기초 강좌를 정리해보고자 합니다.

Script 언어로는 대표적으로 JavaScript, ActionScript, Ruby, Python 등이 있는데요.
Script 언어는 뭔가 가볍고, 문법도 심플한 특성이 있죠. 그래서 아주 간단한 프로그램을 만드는데 매우 좋은 것 같습니다.
( 물론 성능상 단점은 있습니다만.. )

자 그럼 설치와 실행부터 해서 네트워크까지 심플하게 정리를 해볼까요?


설치와 실행


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 조건:  // (콜론이 꼭 있어야 함)
          // do sth (반드시 Tab 으로 들여쓰기 해야 함)

   if 문 :
     if 조건: // (여기도 콜론!!)
         // do sth ( 여기도 tab )
     elif: (else if 가 아니네??)
        // do sth
     else:
        // do sth

    for 문 :
       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> 로 바뀜.
    ex) sys.exit()  (종료)
 
 - OS 모듈 : operating system 제어
    ex) impoty os  
         os.getcwd()  (현재 작업 디렉토리)
         os.listdir(디렉토리)   (디렉토리 안의 파일 이름들)
         os.rename(파일이름, 바꿀 파일이름)  (rename)

 - String 모듈 
     ex) import string
          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을 찾는다. 
         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') 
 
  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.randrange(1,7) 은 1~6 사이.
        random.shuffle(순서형 자료) 는 순서형 자료를 random으로 섞음.
        random.choice(순서형 자료) 는 순서형 자료에서 random으로 하나 choice



파일 입출력


 - 입력
   f = open(디렉토리)
   f.read() (읽어서 바로 출력해준다. enter 가 \n 로 나온다.)
   buffer = f.read()
   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 모듈

 
 자세한 내용은 따로 공부하시길 바랍니다.!!
 이 자료는 그저 맛보기 용으로, 요런요런식으로 쓰면 되고 요런요런것들이 있다는 식의 소개 겸 리마인드 용입니다.

그럼 오늘도 좋은 하루~ 






댓글0