python - module

68
Python - Module

Post on 20-Oct-2014

1.544 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Python - Module

Python - Module

Page 2: Python - Module

이번 시간에 다룰 것들 .• 변화 ..• 모듈은 왜 필요할까 ?• 야구 게임–핵심 기능을 다른 회사가 사겠데 !–파일의 한계–해커가 고장낸 시스템을 고쳐라

• Sublime Text2 셋팅하기

Page 3: Python - Module

시간이 흐르면 ..슈퍼 마리오도 ..

Page 4: Python - Module

배트맨도 변한다 .

Page 5: Python - Module

사장님 아니 ..고객의 마음도 ..

Page 6: Python - Module

하드웨어도 ..

Page 7: Python - Module

소프트웨어 생명주기별 비용Requirements

2%

Specificiation5%

Design6%

Cod-ing5%

Unit Testing7%

Intergration8%Maintenance

67%

출처 - http://bit.ly/VRFE7Q

Page 8: Python - Module

2. 왜 모듈화가 중요한가 ?

일리노이 공대 S.R. Crown Hall http://bit.ly/VQyYMt

Page 9: Python - Module

분할후 정복

Page 10: Python - Module

복잡한 문제는

Page 11: Python - Module

분할후 정복 (Separation of Concerns)

Page 12: Python - Module

부분적인 요구사항이 바뀌었어요 .

Page 13: Python - Module

사고가 났어요 ..

Page 14: Python - Module

3. 모듈화사장님 말씀하시길 ..

“ 여러분이 만든 야구게임은 너무 멋있어 ! 인기가 좋아 !! 그래서 유명 게임사에게 핵심 기능을 팔기로 했네 .”

Page 15: Python - Module

이번 수업을 마치면 ..

• 라이브러리를 만들수 있다 . –코드를 다른 파일로 분할 ( 모듈화 ) 한다 .

• 모듈간에 충돌을 피해라 . –완전 수식 명칭 (Fully Qualified Name –

FQN) 사용 .

Page 16: Python - Module

이번 수업의 시나리오 .

• 함수가 너무 많아 . 함수를 다른 파일에 저장해 보자– 다른 파일에 있는 함수를 어떻게 불러오지 ?

• 새로운 요구사항– 다른 파일에 있는 함수에 데이터를 넘겨주기– 쌍둥이 함수의 다툼

Page 17: Python - Module

3-1. 라이브러리 구축하기

Page 18: Python - Module

먼저 훈남 ! 박재성 교수님의 야구 소스 받기• http://bit.ly/YiaSVc 에서 python 소스를 받으세요

Page 19: Python - Module

소스 코드의 구성함수부

구현부

Page 20: Python - Module

사장님 말씀하시길 ..

음 다행히 잘 함수로 나누어 져 있군 !!

아주 빨리 모듈화 시킬수 있겠는데 .

Page 21: Python - Module

새로운 파일 “ python_module.py” 만들기이 내용을

복사 (Cmd+C) 해서Python_module.py

에 붙여넣기 (Cmd+V)

Page 22: Python - Module

그럼 원본 파일은 ?

Page 23: Python - Module

안돌아 갑니다 ..

Page 24: Python - Module

난 다른 파일에 있는 함수를 쓰고 싶어 from [ 참조하고자 하는 파일이름 ] import *

from python_module import *

• * 의 의미는 ? 모든걸 다 참조 하겠다 .• 즉 python_module 파일에 있는 모든 것을 가져오겠다 !

Page 25: Python - Module

다른 파일 ( 라이브러리 ) 를 참조하겠어요 !

Page 26: Python - Module

라이브러리 (Library)??

도서관 ?

어중이 떠중이 함수가 아니라 , 아주 많이 ~~~ 재활용 되는 함수 (?) 들의 모임

Page 27: Python - Module

이야 !! 나도 라이브러리를 만들수 있게 되었어 !!

Page 28: Python - Module

3-2. 한계 ( 파일 ) 를 뛰어넘는 값 전달

Page 29: Python - Module

고객사가 화가났어 !

고객사에서 .

자네가 준 라이브러리 중에 가장 중요한 기능이 빠졌다고 난리네 .

실제 점수와 사용자가 입력하는 점수를 평가하는 기능이 없다고 하는군 ..

Page 30: Python - Module

이게 빠졌군 !! 넣어보자 ..

Page 31: Python - Module

evaluate 함수를 넣어는데…

Page 32: Python - Module

원인은 ..

Baseball.py라이브러리

python_moudle.py

randomValues 정의 . randomValues 사용하는 곳 .

사용

변수

Page 33: Python - Module

에러의 원인#Baseball.pyevaluate(index, inputValues[index])

#Python_module.pydef evaluate(index, inputValue): for m in range(3): randomValue = randomValues[m] if isSameValue(randomValue, inputValue): if isSameIndex(m, index): return 2 else: return 1

Page 34: Python - Module

해결책#Baseball.pyevaluate(index, inputValues[index],randomValues)

#Python_module.pydef evaluate(index, inputValue, tempvalues): for m in range(3): randomValue = tempvalues[m] if isSameValue(randomValue, inputValue): if isSameIndex(m, index): return 2 else: return 1

Page 35: Python - Module

해결책

Page 36: Python - Module

사장님 말씀하시길 ..

고객사가 멋진 야구게임 라이브러리를 주어서매우 만족한다고 하네 ..

역시 넌 자넨 최고의 프로그래머야 !

Page 37: Python - Module

3-3. 해커의 칩입 !

Page 38: Python - Module

프로그램을 실행시키니 ..

3 개의 숫자를 입력하세요 ?( 예 2,3,4)2,3,4바이러스다 ..바이러스다 ..바이러스다 ..[2, 3, 4]0 strike, 0 ball

Page 39: Python - Module

으악 !! 어떻게

해결하지 !!

Page 40: Python - Module

소스코드 비교분석바이러스 공격당한

Baseball.py Baseball.py

Page 41: Python - Module

두개의 Evaluate 가 생겼다 .

Baseball.py python_moudle.py

Page 42: Python - Module

두개의 마이클 ..

Page 43: Python - Module

두개의 evaluate 함수

Baseball.py python_moudle.py

evaluate evaluate

야구장에서 철수를 부르면 .

뱀골에서철수를 부르면 .

Page 44: Python - Module

당연히 .

먼 주먹 ( 다른 파일에 있는 함수 ) 보다 ..

가까운 주먹 ( 같은 파일에있는 함수 ) 을 조심 ( 먼저 호출하겠죠 ) 해야죠 ..

Page 45: Python - Module

명시적으로 이름을 다 적는다 .

FQN (Fully Qualified Name) 을 사용해라 .

import 라이브러리 라이브러리 . 함수 ( 어쩌고 저쩌고 )

Page 46: Python - Module

해결책 ( 명시적으로 전체이름 쓰기 )

Page 47: Python - Module

사장님 말씀하시길 ..

“ 해커가 고장낸 야구게임도 이렇게 빠르게 고치다니 ! 차주부터 1 주일 휴가를 다녀오게 ! 고맙네 !”

Page 48: Python - Module

정리• 모듈의 필요성– 시간이 흐르면 다 바뀐다 . 확장성등 ..

• 다른 사람도 쓸수 있게 잘 만들어라 ( 라이브러리 ) • 파일의 경계를 넘어서라 (from.. Import *)• 인자 ( 파라메터를 통한 전달 ) • 전체이름으로 부르면 중복된 함수도 걱정 끝 !

• 1 주일동안 푹 쉬고 오세요 !

Page 49: Python - Module

부록 A. Sublime Text2 셋팅하기이제 나도 좀 간지나게 (??) 개발해 보고 싶어요 !!

Page 50: Python - Module

A-1. Package Control 설치• http://bit.ly/wgKqFq 로 접속한다

Cmd+C 눌려서 복사

Page 51: Python - Module

Console 창 뛰우기• Ctrl + ` (1 왼쪽에 있어여 ) 를 누른다

Cmd+V 눌려서 붙이기그리고 Enter

Page 52: Python - Module

재실행 시키기

Page 53: Python - Module

A-2. 사이드바 설치하기Cmd+Shift+P 라고 치면

아래와 같은 드랍박스가 나옵니다 .

Page 54: Python - Module

사이드바 설치하기Inst 라고치면 Install Package 가

나와요 선택하거나 Enter!

Page 55: Python - Module

사이드바 설치하기SidebarEnhancements 라고 치고

Enter

Page 56: Python - Module

A-3. 사이드바 사용하기메뉴 – File – Open 가서

소스코드가 있는 디렉토리 선택

Page 57: Python - Module

사이드바 사용하기사이드바에 나온 폴더를 하나 찍고

Ctrl + 마우스 클릭 하면 ..

Page 58: Python - Module

A-4. 파이썬 개발환경 셋팅Cmd+Shift+P 를 친후 Package Control : Add Repository 라고

치기

Page 59: Python - Module

파이썬 개발환경 셋팅Cmd+Shift+P 를 친후 Package Control : Add Repository 라고

치기

Page 60: Python - Module

파이썬 개발환경 셋팅다음 페이지

주소 치기

Page 61: Python - Module

파이썬 개발환경 셋팅https://github.com/wuub/

SublimeREPL

Page 62: Python - Module

파이썬 개발환경 셋팅Cmd+Shift+P 를 친후

Inst 라고 Install Package 실행

Page 63: Python - Module

파이썬 개발환경 셋팅SublimeREPL 설치

Page 64: Python - Module

파이썬 개발환경 셋팅메뉴에서 View – Layout – Columns2

선택

Page 65: Python - Module

파이썬 개발환경 셋팅메뉴에서

Tools-SublimeREPL-Python-Python

선택

Page 66: Python - Module

파이썬 개발환경 셋팅

Page 67: Python - Module

파이썬 개발환경 셋팅*REPL* [python] 창에서

execfile(“ 여러분의실행파일” ) 을 치세요

예 - execfile(“baseballgame.py”)

Page 68: Python - Module

파이썬 개발환경 셋팅