Index
# 함수 - 클래스 - 모듈 - 패키지 간의 관계
Python 의 method, class, module, package 는 아래 그림과 같이 대략적으로는... 함수⊂클래스⊂모듈⊂패키지 라고 느낌적으로 이해하면 편하다. 각 객체에 대해 간단히 정의해보면 아래와 같다.
- Module(모듈): 파이썬 코드 파일(.py 확장자)을 의미하며, 함수, 클래스, 변수 등을 담고있다. 다른 파이썬 파일에서 import해서 사용할 수 있다.
- Package(패키지): 모듈(파일)을 포함하는 디렉토리(폴더). 패키지 내부에 또 다른 하위 패키지 또는 모듈이 포함될 수 있다.
- Class(클래스): 객체를 만들기 위한 설계도이며, 데이터와 해당 데이터를 처리하는 함수를 하나의 객체로 묶어서 사용할 수 있다.
- Method(메소드): 객체가 가지고 있는 함수. 예를 들어, 리스트에서 사용 가능한 sort()나 append() 같은 함수를 말한다.
# Module(모듈) 에 대해 .. (+ 주요 Built-in 모듈)
- 내부(built-in)모듈과 외부 모듈로 구분됨. 내부모듈은 설치가 불필요한 (sys, pickle, random,math 등..) 외부모듈은 설치가 필요한 (numpy, pandas, matplotlib, tensorflow 등..)모듈
- 'import 모듈', 'from모듈~import 클래스/함수' 로 호출한다. 모듈 닉네임은 as 로 지정한다.
- import 한 모듈의 함수는, '모듈이름(닉네임).함수명' 으로 사용한다.
import numpy as np, pandas as pd # 모듈 호출 및 닉네임 생성
a = np.arange(10) # 호출한 모듈의 함수 사용
- if __name__ == '__main__' 는 모듈에서 숙어처럼 사용하는데, 파이썬 코드를 모듈로 사용할 때와 스크립트로 직접 실행할 때 동작을 다르게 하기 위해 사용하는 조건문이다. (스크립트로 실행하는 코드는 다른모듈에서 import 시에 실행하고 싶지 않을경우).
[my_code.py 모듈]
def add(x, y):
return x + y
if __name__ == '__main__':
result = add(3, 5)
print(result)
# result 의 계산 및 출력은, 다른 모듈에서 my_code.py 모듈을 import 할때 실행되지 않는다.
아래 몇가지 Python 의 주요 Built-in 모듈에 대해서 공부해보자.
1. datetime 모듈
datetime 모듈은 날짜와 시간을 다루기 위한 모듈이다. 이 모듈은 date, time, datetime, timedelta 등의 클래스를 제공하여, 날짜와 시간을 다루기 위한 다양한 함수와 메서드를 제공한다.
현재 시간/ 날짜 생성 , 시간의 합,차이 계산 등 활용 예시를 아래 코드를 통해 알아보자
import datetime
# 현재 날짜와 시간 구하기
now = datetime.datetime.now() #2023-03-06 11:01:23
# 오늘의 날짜 구하기
today = datetime.date.today() #2023-03-06
# 문자열로 표현된 날짜와 시간 정보를 datetime 객체로 변환하기
date_str = '2022-03-05'
dt = datetime.datetime.strptime(date_str, '%Y-%m-%d')
print(dt, type(dt))
# datetime 객체를 문자열로 변환하기
dt_str = dt.strftime('%Y-%m-%d %H:%M:%S')
print(dt_str, type(dt_str))
# 두 날짜 간의 차이 계산하기
d1 = datetime.date(2022, 3, 5)
d2 = datetime.date(2023, 3, 5)
diff = d2 - d1
print(diff)
# 해당 날짜의 요일 정보 구하기
weekday = d1.weekday() # 요일을 0~6 사이의 숫자로 반환. 0은 월요일
# timedelta를 사용하여 시간 간격 계산하기
delta = datetime.timedelta(days=30, hours=12, minutes=30, seconds=30)
future_date = now + delta
print(now, future_date, sep='\n')
# timedelta 는 시간간격을 일과 초단위로 저장한다.
print(delta.days) # 30
print(delta.seconds) # 45030
2. math 모듈
math 모듈은 수학적인 연산을 수행하는 함수들을 제공한다. 이 모듈은 삼각함수, 지수 함수, 로그 함수 등을 포함하며, 숫자 연산에 필요한 상수도 제공한다. 아래는 math 모듈을 이용한 몇가 활용예시이다.
import math
x = 3.7
y = math.ceil(x) # 올림
z = math.floor(x) # 내림
print(x,y,z,sep='\n')
x = 25
y = math.sqrt(x) # 제곱근
print(y)
x = 2 ; y=3
z = math.pow(x,y) # x의 y제곱
print(z)
3. random 모듈
random 모듈은 무작위 수를 생성하는 다양한 함수들을 제공한다. 이 모듈을 사용하면 난수를 생성하거나 무작위로 데이터를 선택할 수 있다. 난수의 생성부터 선택, 셔플 등 다양한 활용예시를 아래 코드를 통해 알아보자.
import random
x= random.random() # 0~1 사이의 임의 실수 생성
y= random.randint(1,10) # 1,10 사이의 임의 정수 생성
z = random.choice(['a','b','c']) # 리스트 안에서 임의 아이템 선정
s = random.sample(['a','b','c'],2) # 중복되지 않는 k개의 항목을 무작위 선택합니다.
print(x,y,z,s, sep='\t')
4. sys 모듈
sys 모듈은 인터프리터와 운영체제와 관련된 몇 가지 변수와 함수에 접근할 수 있도록 한다. 아래 탐색경로 확인, 메모리 사용량 확인 등 몇가지 주요 활용 예시를 코드를 통해 확인해보자.
아래 sys.path 에 append 로 탐색경로를 추가해도 영구적으로 환경변수를 추가하는건 아니고, 현재 실행중인 인터프리터 세션에만 적용된다.
import sys
# sys.argv 는 리스트 형태로 첫번째 인자는 스크립트(파일)이름, 그 뒤는 입력인자를 저장한다.
print("스크립트 이름:", sys.argv[0])
print("인자들:", sys.argv[1:])
# 메모리 할당량(사용량) 확인하기
a = [1,2,3,4,5]
print(sys.getsizeof(a)) #a 리스트의 메모리 사용량
# 모듈검색 탐로 검색,추가
print(sys.path) # 모듈을 탐색하는 경로 리스트로 반환
sys.path.append('sbspace') # sbspace 라는 디렉토리 경로 추가
# Package(패키지) 에 대해 ..
- main_package 라는 패키지 디렉토리안에 module1,2 모듈이 있고, main_package 에 속한 sub_package라는 서브 패키지에 module3 라는 모듈이 있다.
- main.py 모듈에서 module1,2,3 을 가지고 오려면 package 명을 가장 상위패키지부터 제대로 명시해줘야 한다.
- 반면, module1.py 모듈에서 module2 를 가지고 올떄는 현재 디렉토리와 동일하기에 import module2 만 해줘도 된다. (굳이 import 뒤에 package 경로를 기입하지 않고..)
- 모든 디렉토리는 __init__.py 파일을 가지고 있어야, 비로소 패키지로 인식된다. 패키지 역할을 못하는 디렉토리는 모듈을 가지고 있는 폴더역할만 할 뿐 다른 모듈에서 불러다 쓸 수 없다는 뜻이다.
- 사실, Python 3.3 부터는 __init__.py 없어도 패키지 역할을 한다.. ㅎㅎ 하지만 해당 패키지를 초기화 하기 위한 스크립트를 포함할 수 있으니 __init__ 생성을 습관화 하자. (예를들어 __init__ 에 print('start')를 넣으면 해당 패키지가 import 될때마다 start 를 출력한다)
'Study > Python' 카테고리의 다른 글
Numpy 기본 함수 및 연산 (2) | 2023.05.26 |
---|---|
[기초문법] 파일의 읽고 쓰기 (1) | 2023.03.06 |
[기초문법] 사용자 정의 함수 , lambda 함수 (1) | 2023.02.28 |
[기초문법] Class, Object(Instance), Method 이해 (1) | 2023.02.27 |
[기초문법] Python 주요 내장함수(Built-in 함수) (1) | 2023.02.25 |
댓글