python - module
Post on 20-Oct-2014
1.544 views
DESCRIPTION
TRANSCRIPT
Python - Module
이번 시간에 다룰 것들 .• 변화 ..• 모듈은 왜 필요할까 ?• 야구 게임–핵심 기능을 다른 회사가 사겠데 !–파일의 한계–해커가 고장낸 시스템을 고쳐라
• Sublime Text2 셋팅하기
시간이 흐르면 ..슈퍼 마리오도 ..
배트맨도 변한다 .
사장님 아니 ..고객의 마음도 ..
하드웨어도 ..
소프트웨어 생명주기별 비용Requirements
2%
Specificiation5%
Design6%
Cod-ing5%
Unit Testing7%
Intergration8%Maintenance
67%
출처 - http://bit.ly/VRFE7Q
2. 왜 모듈화가 중요한가 ?
일리노이 공대 S.R. Crown Hall http://bit.ly/VQyYMt
분할후 정복
복잡한 문제는
분할후 정복 (Separation of Concerns)
부분적인 요구사항이 바뀌었어요 .
사고가 났어요 ..
3. 모듈화사장님 말씀하시길 ..
“ 여러분이 만든 야구게임은 너무 멋있어 ! 인기가 좋아 !! 그래서 유명 게임사에게 핵심 기능을 팔기로 했네 .”
이번 수업을 마치면 ..
• 라이브러리를 만들수 있다 . –코드를 다른 파일로 분할 ( 모듈화 ) 한다 .
• 모듈간에 충돌을 피해라 . –완전 수식 명칭 (Fully Qualified Name –
FQN) 사용 .
이번 수업의 시나리오 .
• 함수가 너무 많아 . 함수를 다른 파일에 저장해 보자– 다른 파일에 있는 함수를 어떻게 불러오지 ?
• 새로운 요구사항– 다른 파일에 있는 함수에 데이터를 넘겨주기– 쌍둥이 함수의 다툼
3-1. 라이브러리 구축하기
먼저 훈남 ! 박재성 교수님의 야구 소스 받기• http://bit.ly/YiaSVc 에서 python 소스를 받으세요
소스 코드의 구성함수부
구현부
사장님 말씀하시길 ..
음 다행히 잘 함수로 나누어 져 있군 !!
아주 빨리 모듈화 시킬수 있겠는데 .
새로운 파일 “ python_module.py” 만들기이 내용을
복사 (Cmd+C) 해서Python_module.py
에 붙여넣기 (Cmd+V)
그럼 원본 파일은 ?
안돌아 갑니다 ..
난 다른 파일에 있는 함수를 쓰고 싶어 from [ 참조하고자 하는 파일이름 ] import *
from python_module import *
• * 의 의미는 ? 모든걸 다 참조 하겠다 .• 즉 python_module 파일에 있는 모든 것을 가져오겠다 !
다른 파일 ( 라이브러리 ) 를 참조하겠어요 !
라이브러리 (Library)??
도서관 ?
어중이 떠중이 함수가 아니라 , 아주 많이 ~~~ 재활용 되는 함수 (?) 들의 모임
이야 !! 나도 라이브러리를 만들수 있게 되었어 !!
3-2. 한계 ( 파일 ) 를 뛰어넘는 값 전달
고객사가 화가났어 !
고객사에서 .
자네가 준 라이브러리 중에 가장 중요한 기능이 빠졌다고 난리네 .
실제 점수와 사용자가 입력하는 점수를 평가하는 기능이 없다고 하는군 ..
이게 빠졌군 !! 넣어보자 ..
evaluate 함수를 넣어는데…
원인은 ..
Baseball.py라이브러리
python_moudle.py
randomValues 정의 . randomValues 사용하는 곳 .
사용
변수
에러의 원인#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
해결책#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
해결책
사장님 말씀하시길 ..
고객사가 멋진 야구게임 라이브러리를 주어서매우 만족한다고 하네 ..
역시 넌 자넨 최고의 프로그래머야 !
3-3. 해커의 칩입 !
프로그램을 실행시키니 ..
3 개의 숫자를 입력하세요 ?( 예 2,3,4)2,3,4바이러스다 ..바이러스다 ..바이러스다 ..[2, 3, 4]0 strike, 0 ball
으악 !! 어떻게
해결하지 !!
소스코드 비교분석바이러스 공격당한
Baseball.py Baseball.py
두개의 Evaluate 가 생겼다 .
Baseball.py python_moudle.py
두개의 마이클 ..
두개의 evaluate 함수
Baseball.py python_moudle.py
evaluate evaluate
야구장에서 철수를 부르면 .
뱀골에서철수를 부르면 .
당연히 .
먼 주먹 ( 다른 파일에 있는 함수 ) 보다 ..
가까운 주먹 ( 같은 파일에있는 함수 ) 을 조심 ( 먼저 호출하겠죠 ) 해야죠 ..
명시적으로 이름을 다 적는다 .
FQN (Fully Qualified Name) 을 사용해라 .
import 라이브러리 라이브러리 . 함수 ( 어쩌고 저쩌고 )
해결책 ( 명시적으로 전체이름 쓰기 )
사장님 말씀하시길 ..
“ 해커가 고장낸 야구게임도 이렇게 빠르게 고치다니 ! 차주부터 1 주일 휴가를 다녀오게 ! 고맙네 !”
정리• 모듈의 필요성– 시간이 흐르면 다 바뀐다 . 확장성등 ..
• 다른 사람도 쓸수 있게 잘 만들어라 ( 라이브러리 ) • 파일의 경계를 넘어서라 (from.. Import *)• 인자 ( 파라메터를 통한 전달 ) • 전체이름으로 부르면 중복된 함수도 걱정 끝 !
• 1 주일동안 푹 쉬고 오세요 !
부록 A. Sublime Text2 셋팅하기이제 나도 좀 간지나게 (??) 개발해 보고 싶어요 !!
A-1. Package Control 설치• http://bit.ly/wgKqFq 로 접속한다
Cmd+C 눌려서 복사
Console 창 뛰우기• Ctrl + ` (1 왼쪽에 있어여 ) 를 누른다
Cmd+V 눌려서 붙이기그리고 Enter
재실행 시키기
A-2. 사이드바 설치하기Cmd+Shift+P 라고 치면
아래와 같은 드랍박스가 나옵니다 .
사이드바 설치하기Inst 라고치면 Install Package 가
나와요 선택하거나 Enter!
사이드바 설치하기SidebarEnhancements 라고 치고
Enter
A-3. 사이드바 사용하기메뉴 – File – Open 가서
소스코드가 있는 디렉토리 선택
사이드바 사용하기사이드바에 나온 폴더를 하나 찍고
Ctrl + 마우스 클릭 하면 ..
A-4. 파이썬 개발환경 셋팅Cmd+Shift+P 를 친후 Package Control : Add Repository 라고
치기
파이썬 개발환경 셋팅Cmd+Shift+P 를 친후 Package Control : Add Repository 라고
치기
파이썬 개발환경 셋팅다음 페이지
주소 치기
파이썬 개발환경 셋팅https://github.com/wuub/
SublimeREPL
파이썬 개발환경 셋팅Cmd+Shift+P 를 친후
Inst 라고 Install Package 실행
파이썬 개발환경 셋팅SublimeREPL 설치
파이썬 개발환경 셋팅메뉴에서 View – Layout – Columns2
선택
파이썬 개발환경 셋팅메뉴에서
Tools-SublimeREPL-Python-Python
선택
파이썬 개발환경 셋팅
파이썬 개발환경 셋팅*REPL* [python] 창에서
execfile(“ 여러분의실행파일” ) 을 치세요
예 - execfile(“baseballgame.py”)
파이썬 개발환경 셋팅