10장 모듈¶
10.1 모듈을 사용하는 이유¶
모듈 생성 및 호출¶
모듈 만들기¶
[10장: 181페이지]
# #절대경로
# %%writefile C:\myPyCode\my_first_module.py
# #상대경로
%%writefile .\my_first_module.py
# File name: my_first_module.py
def my_function():
print("This is my first module.")
UsageError: Line magic function `%%writefile` not found.
%%writefile .\my_first_module.py
def my_function():
print("This is my first module.")
[10장: 182페이지]
!type C:\AI\pythonProject\venv\pkg\book\notebook\my_first_module.py
모듈 불러오기¶
[10장: 182페이지]
cd C:/AI/pythonProject/venv/pkg/book/notebook
[10장: 183페이지]
from pkg.book.notebook import my_first_module
my_first_module.my_function()
[10장: 183페이지]
!echo %PYTHONPATH%
[10장: 184페이지]
%%writefile .\my_area.py
# File name: my_area.py
PI = 3.14
def square_area(a): # 정사각형의 넓이 반환
return a ** 2
def circle_area(r): # 원의 넓이 반환
return PI * r ** 2
[10장: 184페이지]
cd C:/AI/pythonProject/venv/pkg/book/notebook
[10장: 184페이지]
from pkg.book.notebook import my_area # 모듈 불러오기
print('pi =', my_area.PI) # 모듈의 변수 이용
print('square area =', my_area.square_area(5)) # 모듈의 함수 이용
print('circle area =', my_area.circle_area(2))
[10장: 185페이지]
from pkg.book.notebook import my_area as ma # 모듈 불러오기
print('pi =', ma.PI) # 모듈의 변수 이용
print('square area =', ma.square_area(5)) # 모듈의 함수 이용
print('circle area =', ma.circle_area(2))
dir(my_area) #my_area.__dir__
모듈을 불러오는 다른 형식¶
모듈의 내용 바로 선언¶
[10장: 186페이지]
from my_area import PI # 모듈의 변수 바로 불러오기
print('pi =', PI) # 모듈의 변수 이용
[10장: 186페이지]
from my_area import square_area
from my_area import circle_area
print('square area =', square_area(5)) # 모듈의 함수 이용
print('circle area =', circle_area(2))
[10장: 186페이지]
from my_area import PI, square_area, circle_area
print('pi =', PI) # 모듈의 변수 이용
print('square area =', square_area(5)) # 모듈의 함수 이용
print('circle area =', circle_area(2))
[10장: 187페이지]
from my_area import * #하지마셈 여러개 임포트할때 변수 충돌날 수도 있음
print('pi =', PI) # 모듈의 변수 이용
print('square area =', square_area(5)) # 모듈의 함수 이용
print('circle area =', circle_area(2))
[10장: 187 ~ 188페이지]
%%writefile .\my_module1.py
# File name: my_module1.py
def func1():
print("func1 in my_module1 ")
def func2():
print("func2 in my_module1 ")
%%writefile .\my_module2.py
# File name: my_module2.py
def func2():
print("func2 in my_module2 ")
def func3():
print("func3 in my_module2 ")
[10장: 188페이지]
from my_module1 import *
from my_module2 import *
func1()
func2()
func3()
func1 in my_module1
func2 in my_module2
func3 in my_module2
[10장: 188페이지]
from pkg.book.notebook.my_module2 import *
from pkg.book.notebook.my_module1 import *
func1()
func2()
func3()
func1 in my_module1
func2 in my_module1
func3 in my_module2
from pkg.book.notebook.my_module1 import * #비추
#func()
from pkg.book.notebook.my_module2 import *
#func2() func3()
func1()
func2()
func3()
func1 in my_module1
func2 in my_module2
func3 in my_module2
모듈명을 별명으로 선언¶
[10장: 189페이지]
import my_area as area # 모듈명(my_area)에 별명(area)을 붙임
print('pi =', area.PI) # 모듈명 대신 별명 이용
print('square area =', area.square_area(5))
print('circle area =', area.circle_area(2))
pi = 3.14
square area = 25
circle area = 12.56
[10장: 190페이지]
from my_area import PI as pi
from my_area import square_area as square
from my_area import circle_area as circle
print('pi =', pi) # 모듈 변수의 별명 이용
print('square area =', square(5)) # 모듈 함수의 별명 이용
print('circle area =', circle(2))
pi = 3.14
square area = 25
circle area = 12.56
10.3 모듈을 직접 실행하는 경우와 임포트한 후 실행하는 경우 구분하기¶
[10장: 190페이지]
%%writefile .\my_module_test1.py
# File name: my_module_test1.py
def func(a):
print("입력 숫자:", a)
func(3)
Overwriting .\my_module_test1.py
[10장: 191페이지]
%run .\my_module_test1.py
입력 숫자: 3
[10장: 191페이지]
import my_module_test1
[10장: 192페이지]
%%writefile .\my_module_test2.py
# File name: my_module_test2.py
def func(a):
print("입력 숫자:",a)
if __name__ == "__main__":
print("모듈을 직접 실행")
func(3)
func(4)
Overwriting .\my_module_test2.py
[10장: 192페이지]
%run .\my_module_test2.py
모듈을 직접 실행
입력 숫자: 3
입력 숫자: 4
[10장: 192페이지]
import my_module_test2
[10장: 193페이지]
%%writefile .\my_module_test3.py
# File name: my_module_test3.py
def func(a):
print("입력 숫자:",a)
if __name__ == "__main__":
print("모듈을 직접 실행")
func(3)
func(4)
else:
print("모듈을 임포트해서 실행")
Writing .\my_module_test3.py
[10장: 193페이지]
%run .\my_module_test3.py
모듈을 직접 실행
입력 숫자: 3
입력 숫자: 4
[10장: 194페이지]
import my_module_test3
모듈을 임포트해서 실행
10.4 내장 모듈¶
난수 발생 모듈¶
[10장: 195페이지]
import random
random.random()
0.10173216095735893
[10장: 195페이지]
import random
dice1 = random.randint(1,6) # 임의의 정수가 생성됨
dice2 = random.randint(1,6) # 임의의 정수가 생성됨
print('주사위 두 개의 숫자: {0}, {1}'.format(dice1, dice2))
주사위 두 개의 숫자: 6, 3
[10장: 196페이지]
import random
random.randrange(0,11,2)
4
[10장: 196페이지]
import random
num1 = random.randrange(1, 10, 2) # 1 ~ 9(10-1) 중 임의의 홀수 선택
num2 = random.randrange(0,100,10) # 0 ~ 99(100-1) 중 임의의10의 단위 숫자 선택
print('num1: {0}, num2: {1}'.format(num1,num2))
num1: 5, num2: 60
[10장: 196페이지]
import random
menu = ['비빔밥', '된장찌개', '볶음밥', '불고기', '스파게티', '피자', '탕수육']
random.choice(menu)
'된장찌개'
[10장: 197페이지]
import random
random.sample([1, 2, 3, 4, 5], 2) # 모집단에서 두 개의 인자 선택
[1, 3]
날짜 및 시간 관련 처리 모듈¶
[10장: 198페이지]
import datetime
set_day = datetime.date(2019, 3, 1)
print(set_day)
2019-03-01
[10장: 198페이지]
print('{0}/{1}/{2}'.format(set_day.year,set_day.month,set_day.day ))
2019/3/1
[10장: 198 ~ 199페이지]
import datetime
day1 = datetime.date(2019, 4, 1)
day2 = datetime.date(2019, 7, 10)
diff_day = day2 - day1
print(diff_day)
100 days, 0:00:00
[10장: 199페이지]
type(day1)
datetime.date
type(diff_day)
datetime.timedelta
[10장: 199페이지]
print("** 지정된 두 날짜의 차이는 {}일입니다. **".format(diff_day.days))
** 지정된 두 날짜의 차이는 100일입니다. **
[10장: 199페이지]
import datetime
print(datetime.date.today())
2021-12-31
[10장: 200페이지]
import datetime
today = datetime.date.today()
special_day = datetime.date(2018, 12, 31)
print(special_day - today)
-1096 days, 0:00:00
[10장: 200페이지]
import datetime
set_time = datetime.time(15, 30, 45)
print(set_time)
15:30:45
[10장: 200페이지]
print('{0}:{1}:{2}'.format(set_time.hour,set_time.minute,set_time.second ))
15:30:45
[10장: 200페이지]
import datetime
set_dt = datetime.datetime(2018, 10, 9, 10, 20, 0)
print(set_dt)
2018-10-09 10:20:00
[10장: 200 ~ 201페이지]
print('날짜 {0}/{1}/{2}'.format(set_dt.year, set_dt.month, set_dt.day))
print('시각 {0}:{1}:{2}'.format(set_dt.hour, set_dt.minute, set_dt.second))
날짜 2018/10/9
시각 10:20:0
[10장: 201페이지]
import datetime
now = datetime.datetime.now()
print(now)
2021-12-31 16:27:20.039853
[10장: 201페이지]
print("Date & Time: {:%Y-%m-%d, %H:%M:%S}".format(now))
Date & Time: 2021-12-31, 16:27:20
[10장: 201페이지]
print("Date: {:%Y, %m, %d}".format(now))
print("Time: {:%H/%M/%S}".format(now))
Date: 2021, 12, 31
Time: 16/27/20
[10장: 201 ~ 202페이지]
now = datetime.datetime.now()
set_dt = datetime.datetime(2017, 12, 1, 12, 30, 45)
print("현재 날짜 및 시각:", now)
print("차이:", set_dt - now)
현재 날짜 및 시각: 2021-12-31 16:27:20.085754
차이: -1492 days, 20:03:24.914246
[10장: 202페이지]
from datetime import date, time, datetime
print(date(2019, 7, 1))
2019-07-01
print(date.today())
2021-12-31
print(time(15, 30, 45))
15:30:45
print(datetime(2020, 2, 14, 18, 10, 50))
2020-02-14 18:10:50
print(datetime.now())
2021-12-31 16:27:20.160530
달력 생성 및 처리 모듈¶
[10장: 204페이지]
import calendar
print(calendar.calendar(2018))
2018
January February March
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 1 2 3 4
8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11
15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18
22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25
29 30 31 26 27 28 26 27 28 29 30 31
April May June
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 1 2 3 4 5 6 1 2 3
2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10
9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17
16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24
23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30
30
July August September
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 1 2 3 4 5 1 2
2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9
9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16
16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23
23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30
30 31
October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 1 2
8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9
15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16
22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23
29 30 31 26 27 28 29 30 24 25 26 27 28 29 30
31
[10장: 205페이지]
print(calendar.calendar(2019, m=4))
2019
January February March April
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 1 2 3 1 2 3 1 2 3 4 5 6 7
7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10 8 9 10 11 12 13 14
14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17 15 16 17 18 19 20 21
21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24 22 23 24 25 26 27 28
28 29 30 31 25 26 27 28 25 26 27 28 29 30 31 29 30
May June July August
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 1 2 1 2 3 4 5 6 7 1 2 3 4
6 7 8 9 10 11 12 3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11
13 14 15 16 17 18 19 10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18
20 21 22 23 24 25 26 17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25
27 28 29 30 31 24 25 26 27 28 29 30 29 30 31 26 27 28 29 30 31
September October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 1 2 3 4 5 6 1 2 3 1
2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8
9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15
16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22
23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29
30 30 31
[10장: 206페이지]
print(calendar.month(2020,9))
September 2020
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
[10장: 206페이지]
calendar.monthrange(2020,2)
(5, 29)
[10장: 206페이지]
calendar.firstweekday()
0
[10장: 207페이지]
calendar.setfirstweekday(calendar.SUNDAY)
print(calendar.month(2020,9))
September 2020
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
[10장: 208페이지]
print(calendar.weekday(2018, 10, 14))
6
[10장: 208페이지]
print(calendar.isleap(2018))
print(calendar.isleap(2020))
False
True
위의 출력 결과에서 2020년은 윤년인 것을 알 수 있습니다.
10.5 패키지¶
패키지의 구조¶
패키지 만들기¶
[10장: 210페이지]
mkdir C:\myPyCode\packages\image; C:\myPyCode\packages\image\io_file
[10장: 210페이지]
%%writefile C:\myPyCode\packages\image\__init__.py
# File name: __init__.py
Writing C:\myPyCode\packages\image\__init__.py
%%writefile C:\myPyCode\packages\image\io_file\__init__.py
# File name: __init__.py
Writing C:\myPyCode\packages\image\io_file\__init__.py
[10장: 210페이지]
%%writefile C:\myPyCode\packages\image\io_file\imgread.py
# File name: imgread.py
def pngread():
print("pngread in imgread module")
def jpgread():
print("jpgread in imgread module")
Writing C:\myPyCode\packages\image\io_file\imgread.py
[10장: 210페이지]
!tree /F c:\myPyCode\packages
폴더 PATH의 목록입니다.
볼륨 일련 번호가 00000082 F2F5:1155입니다.
C:\MYPYCODE\PACKAGES
└─image
│ __init__.py
│
└─io_file
imgread.py
__init__.py
패키지 사용하기¶
[10장: 211페이지]
import image.io_file.imgread # image 패키지 io_file 폴더의 imgread 모듈 임포트
image.io_file.imgread.pngread() # imgread 모듈 내의 pngread() 함수 호출
image.io_file.imgread.jpgread() # imgread 모듈 내의 jpgread() 함수 호출
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_19080/3535555126.py in <module>
----> 1 import image.io_file.imgread # image 패키지 io_file 폴더의 imgread 모듈 임포트
2
3 image.io_file.imgread.pngread() # imgread 모듈 내의 pngread() 함수 호출
4 image.io_file.imgread.jpgread() # imgread 모듈 내의 jpgread() 함수 호출
ModuleNotFoundError: No module named 'image'
[10장: 211페이지]
from image.io_file import imgread
imgread.pngread()
imgread.jpgread()
[10장: 212페이지]
from image.io_file.imgread import pngread
pngread()
[10장: 212페이지]
from image.io_file.imgread import *
pngread()
jpgread()
[10장: 212페이지]
from image.io_file.imgread import pngread, jpgread
pngread()
jpgread()
[10장: 212 ~ 213페이지]
from image.io_file import imgread as img
img.pngread()
img.jpgread()
[10장: 213페이지]
from image.io_file.imgread import pngread as pread
from image.io_file.imgread import jpgread as jread
pread()
jread()
10.6 정리¶
'Python > 문법' 카테고리의 다른 글
파이썬 - enumerate 함수 (0) | 2022.01.04 |
---|---|
파이썬 - 예외 처리 (0) | 2022.01.03 |
파이썬 - 클래스 자세히 (0) | 2021.12.31 |
파이썬 - 클래스/모듈 (0) | 2021.12.30 |
파이썬 - 함수 (0) | 2021.12.30 |
댓글