기록하는삶

[파이썬/python] 모듈(Module)의 정의, 모듈 만들어보기, 내장모듈(datetime, random 등) 본문

AI/파이썬(Python)

[파이썬/python] 모듈(Module)의 정의, 모듈 만들어보기, 내장모듈(datetime, random 등)

mingchin 2021. 9. 22. 00:53
728x90
반응형

모듈(Module)이란?

> 코드가 저장된 파일

> 파일을 가지고 있거나, 파일이 포함된 패키지(여러 모듈을 폴더 형식으로 모아놓은 것을 패키지라 부른다)를 가지고 있는 경우, 다른 코드에서도 해당 파일에 포함된 변수, 함수, 클래스 등을 불러와 사용할 수 있다.

> 모듈 이름은 확장자(.py)를 제외한 파일 이름으로 불러온다.

> 장점

① 코드 작성 및 관리가 용이함

② 코드의 재사용이 가능하고 편리함

③ 공동 작업이 편함

모듈(Module) 만들고 활용해보기

아주 허접하지만 간단한, 함수 네 개를 만들어보았다. 첫 함수는 모듈을 소개하는 말을 출력하고, version이라는 변수를 생성 날짜로 지정했다. 이어지는 세 함수는 각각 자연수와 자연수의 제곱, 세제곱의 합을 구하는 함수다.

해당 파일을 'Sigma'라는 이름으로 저장했다. 이때 File → Download as → Python(.py)의 형태로 다운 받아 주피터노트북을 사용할 디렉토리에 넣어야함에 유의하자.

이제 새로운 파일(코드)에서 생성한 모듈을 사용할 준비가 되었다. 모듈 혹은 패키지를 사용하는 방법은 크게 두 가지이다.

1) 모듈의 일부만 불러오기 (from 모듈명 import 함수/변수/클래스 as 별명)

이렇게 특정 함수만 받아오는 경우에는, 해당 함수를 마치 지금 띄워놓은 파일에서 정의한 것처럼 바로 사용할 수 있다. 다만 그 함수만 받아오기 떄문에, 같은 파일에 정의한 다른 변수나 함수는 따로 불러오지 않으면 실행되지 않는다. 'as 별명'은 위처럼 생략해도 되고, 또는

이렇게 축약해 사용도 가능하다. 모듈 또는 패키지가 매우 큰데 다 필요한게 아니라 일부만 필요한 경우에 사용하면 좋다.

2) 모듈 전체 불러오기(import 모듈명 as 별명)

모듈 전체를 불러오는 경우, 해당 파일이 포함하고 있는 모든 변수와 클래스, 함수 등을 가져다 사용할 수 있다. 이때는 각 모듈 내에서 변수, 함수를 사용한다는 표시로 앞에 모듈명을 붙여주어야 한다. 당연히 별명을 활용하면 보다 간편하게 사용이 가능하다.

아나콘다가 제공하는 기본 모듈, random/datetime/calender

아나콘다를 설치하면 기본적으로 자주 사용하는 모듈 혹은 패키지들을 따로 설치하지 않아도 자동으로 함께 깔린다. 그 중 유용한 몇 가지를 정리해보자.

1) 난수 발생 모듈 random

불러오기: import random

① random.random(): 0 이상 1 미만의 임의의 실수 반환

난수이기 때문에, 당연히 실행할 때마다 숫자가 바뀐다. round( 실수, n)를 통해 소수 n째자리까지만 확인할 수 있다.

② random.randint(a,b): a 이상 b 이하 범위의 임의의 정수 반환

특정 범위에서 임의의 정수 하나를 반환한다. 이때는 양 끝 정수가 모두 포함된 범위이므로, 결과로 나올 수 있다.

③ random.randrange(a, b, step): a 이상 b 미만의 범위에서 step 간격으로 임의의 정수를 반환

range() 함수에서의 속성과 유사하게 a가 생략되면 default 값은 a==0이고, c가 생략되면 default 값은 c==1이다. 역시 range() 함수와 마찬가지로 b는 범위에서 제외되며, step을 줄 경우 첫 정수부터 step 간격으로 있는 정수들 중 하나를 반환한다. 예시에서 시작이 10이고 step이 3이므로, 3으로 나누었을 때 나머지가 1인 숫자들만 반환되는 것을 볼 수 있다.

④ random.sample(모집단, 표본의 크기_k): 시퀀스로 된 모집단에서 중복되지 않는 k개(표본의 크기)의 인자를 반환

n개의 시퀀스 혹은 set에서 k개의 인자를 반환한다. 리스트, 셋, 튜플, range() 등이 모집단으로 들어갈 수 있고, 결과는 리스트로 나오며 순서의 영향을 받는다.

2) 날짜 및 시간 datetime

불러오기: import datetime

date 클래스: 날짜 표현

time 클래스: 시간 표현

datetime 클래스: 날짜 + 시간 표현

다음과 같이 날짜, 혹은 시간을 직접 변수로 설정하거나

datetime(dt).date.today()를 이용해 코드 입력 당시의 날짜를 알 수도 있다. 또한 날짜 끼리의 차를 구하면 해당 날짜들 사이의 기간도 알 수 있다.

위처럼 datetime(dt).datetime.now()를 이용 현재 시각을 알 수도 있고, 아래와 같은 방법을 통해 다양하게 표현해볼 수 있다. 하이라이트 친 박스에서는 중괄호{} 안에 저 정보들을 넣어야 한다는 점, 중괄호 시작할 때 :표시, 대소문자 구분 등에 유의해야 한다.

아래쪽의 datetime(dt).datetime.now().strftime()을 이용하면, 날짜 정보를 str type으로 변환할 수 있다. 우리는 now를 잘 정의했으므로 now.strftime()이라 입력해도 같은 기능을 한다.

3) 달력 calendar

불러오기: import calandar

calendar.calendar(연도): 달력 생성이 가능

calendar.calendar(연도, m=4)로 한 줄에 4개가 나오게 할 수 있다. 입력하지 않으면 default 값은 m=3이다.

calendar.monthrange(연도, 달): 지정한 연도의 달이 어떤 요일로 시작하고, 며칠인지를 반환함.

( 0 = 월요일, 1 = 화요일, 2 = 수요일, 3 = 목요일, 4 = 금요일, 5 = 토요일, 6 = 일요일 )

즉, 2020년 2월은 토요일로 시작하고, 29일로 구성돼있다.

calendar.month(연도, 달): 지정한 연도의 달의 달력을 str type으로 반환

calendar.firstweekday(): 현재 달력의 시작 요일이 무슨 요일인지 확인 할 수 있다. default값은 0(월요일)이다.

calendar.setfirstweekday(calendar.요일): 달력의 시작 요일을 변경한다. 요일은 대문자로 입력해야한다. 변경했더니 아래와 같이 달력이 구성되고, calendar.firstweekday()를 통해 확인하면 시작 요일이 일요일(6)으로 바뀌어 있다.

calendar.weekday(연도, 월, 일): 해당 날짜의 요일을 알려준다. 2050년 내 생일은 화요일이구나.

calendar.isleap(연도): 해당 연도가 윤년인지 여부를 알려준다. 윤년이면 TRUE 아니면 FALSE.

728x90
반응형