72 — 모듈: 여러 파일 프로젝트
23은 프로그램에서 도우미를 나누었고, 67은 저장 모듈 하나를 썼습니다. 진짜 프로젝트는 모듈 하나보다 큽니다. 이 가이드는 날씨 보고서를 모듈 세 개로 만듭니다 — 데이터를 불러오는 모듈, 분석하는 모듈, 출력하는 모듈. 각 모듈은 일 하나만 하고, 주 프로그램은 필요한 이름만 가져옵니다.
단계
프로젝트에는 먼저 데이터가 필요합니다.
weather.json을 만듭니다 —day와temp(기온)가 든 하루짜리 기록들의 목록:
실행해 보기 →[ {"day": "Mon", "temp": 21}, {"day": "Tue", "temp": 25}, {"day": "Wed", "temp": 18}, {"day": "Thu", "temp": 24}, {"day": "Fri", "temp": 27} ]fetch_ko.nme은 입력 모듈입니다. 파일을 읽는 일만 합니다. 14의파일 사용모듈이 읽기를 담당합니다:
실행해 보기 →# fetch_ko.nme — 날씨 데이터를 불러옵니다. 파일 사용 최신 def 날씨불러오기(): return json읽기("weather.json")모듈의 인터페이스는 이름 하나,
날씨불러오기입니다.analyze_ko.nme은 계산 담당입니다.평균은 기온을 더하고 나눕니다 (54와 같습니다),가장더운날은if로 날들을 훑으며 가장 따뜻한 날을 기억합니다:
실행해 보기 →# analyze_ko.nme — 평균과 가장 더운 날을 계산합니다. def 평균(기온들): 합계 = 0 for t in 기온들: 합계 = 합계 + t return 합계 / len(기온들) def 가장더운날(날들): 제일 = 날들[0] for 날 in 날들: if 날["temp"] > 제일["temp"]: 제일 = 날 return 제일report_ko.nme은 출력 모듈입니다. 보고서를 출력하는 방법만 알고, 다른 것은 모릅니다 — 파일 읽기도, 계산도 없습니다:
실행해 보기 →# report_ko.nme — 날씨 보고서를 출력합니다. def 보고(날들, 평균기온, 제일): 말해 f"날씨 보고서: {len(날들)}일" 말해 f"평균: {평균기온:.1f}C" 말해 f"가장 더운 날: {제일['day']} {제일['temp']}C"main.ko.nme이 프로젝트를 묶습니다. 가져오기 줄이 모듈마다 인터페이스를 나열합니다 —from "fetch_ko.nme" import 날씨불러오기, 그다음 분석 함수 둘, 그다음 보고서 함수. 주 프로그램이 순서를 정합니다: 불러오고, 기온을 모으고, 계산하고, 출력합니다. 세 모듈 옆에 저장합니다:# main.ko.nme — 날씨 보고서 프로젝트. # 실행: nme 실행 main.ko # weather.json이 같은 폴더에 있어야 합니다. from "fetch_ko.nme" import 날씨불러오기 from "analyze_ko.nme" import 평균, 가장더운날 from "report_ko.nme" import 보고 날들 = 날씨불러오기() 기온들 = [] for 날 in 날들: 기온들.append(날["temp"]) 평균기온 = 평균(기온들) 제일 = 가장더운날(날들) 보고(날들, 평균기온, 제일)날들은 불러온 목록이고,기온들은 기온의 열이고,평균기온은 평균,제일은 가장 따뜻한 기록입니다 — 각 값은 정확히 한 모듈에 속하며, main은 인터페이스 사이에서 값들을 옮길 뿐입니다.데이터 파일이 있는 상태에서 주 프로그램을 실행합니다:
nme 실행 main.ko날씨 보고서: 5일 평균: 23.0C 가장 더운 날: Fri 27C21, 25, 18, 24, 27의 평균은 23.0이고, 27도의 금요일이 가장 더운 날입니다.
모듈 경계를 넘는 것은 가져온 이름뿐입니다.
json읽기는fetch_ko.nme의파일 사용 최신덕분에 그 모듈 안에 살지만, main은 그것을 전혀 볼 수 없습니다 — main이 쓸 수 있는 것은 가져오기 목록의 이름뿐입니다. 모듈 자신의 도우미도 같습니다.analyze_ko.nme에def _화씨(t)같은 비공개 함수를 추가해도 그대로 비공개로 남습니다. 가져오기 목록이 곧 인터페이스이므로, 모듈 내부를 바꿔도 가져오는 프로그램은 절대 깨지지 않습니다.영어는 같은 프로젝트를
use file latest,json_load,show와fetch.nme같은 이름으로 씁니다. 영어 파일 네 개는 영어 가이드에 있습니다.
직접 해보기
analyze_ko.nme에 가장추운날(날들)을 추가하고 main에서 가져와 보고서에
가장 추운 날도 출력해 보세요. 힌트: 가장더운날과 같은 반복이지만 비교를
<로 바꿉니다. 그런 다음 report_ko.nme에 도시 이름을 출력하는 머리 줄을
넣어 보세요.
배운 것
- 프로젝트는 일별로 모듈을 나눕니다 — 입력, 계산, 출력.
- 각 모듈은 작은 인터페이스, 즉 가져오기 목록의 이름들을 내보냅니다.
from "fetch_ko.nme" import 날씨불러오기가 이름 하나만 넘겨 줍니다.- 주 프로그램은 모듈 인터페이스 사이에서 값들을 옮길 뿐입니다.