[sesac LLM] day8-240111 Python 모듈
복습
퀴즈
- 인수(arguments)와 매개변수(parameters)의 차이는?
- 매개변수(parameters)는 함수 정의 시에 함수가 받아야 하는 값들의 이름을 가리키며,
- 인수(arguments)는 함수를 호출할 때 실제로 전달되는 값들을 가리킨다.
- lambda 는 언제 쓰는게 좋나?
- lambda 함수는 간단한 작업을 수행하는 익명 함수로, 주로 한 번만 사용하거나 간단한 함수를 필요로 할 때 유용하다.
- filter 함수는 전달된 함수의 리턴 값이 True인 이터러블 객체만 남긴다? (True / False)
- True. filter 함수는 전달된 함수의 리턴 값이 True인 요소만 남기는 역할을 한다.
데코레이터
- 데코레이터는 기존 함수를 수정하지 않고도 그 함수의 기능을 확장하거나 수정할 수 있는 방법
- 데코레이터는 일반적으로 함수를 감싸는 래퍼(wrapper) 함수의 형태로 사용되며 주로 로깅, 접근 제어, 성능 측정 등과 같은 공통 기능을 구현하는 데 활용된다.
- 여기에 주어진 예제를 통해 데코레이터를 알아보자:
#pythonCopy code
def my_decorator(func):
def wrapper():
print("무언가를 실행하기 전...")
func()
print("무언가를 실행한 후...")
return wrapper
@my_decorator
def say_hello():
print("안녕하세요!")
say_hello()
- my_decorator 함수는 다른 함수를 매개변수로 받아 래퍼 함수 **wrapper**를 반환한다.
- wrapper 함수는 주어진 함수를 감싸고, 실행하기 전과 후에 추가적인 동작을 수행한다.
- @my_decorator 데코레이터를 사용하여 say_hello 함수에 데코레이터를 적용한다.
- say_hello 함수를 호출하면 실제로는 **my_decorator**에 의해 생성된 wrapper 함수가 실행된다.
- 실행 전과 후에 추가적인 메시지가 출력되어 확장된 동작을 확인할 수 있다.
이렇게 데코레이터를 사용하면 함수의 기능을 확장하거나 수정하기 위해 코드 중복을 피하고 코드를 더 간결하게 유지할 수 있다.
모듈
퀴즈
- 파이썬에서 모듈은 .py 로 끝나는 파일을 의미한다. (True, False) ⇒ True
- 모듈을 불러 올 때 사용하는 키워드는? ⇒ import
모듈(Module)이란?
- 파이썬에서 모듈이란 함수, 변수, 클래스 등을 담고 있는 파일을 의미
- 모듈을 통해 코드 재사용성 및 네임스페이스 관리가 용이
표준 모듈이란?
- 파이썬의 내장되어 있는 모듈들.
- 너무 자주쓰는 기능들이라 붙박이(built in)로 만들어 놨다.
math 모듈
math 모듈은 수학적인 연산을 수행하는 함수와 상수를 제공
제곱근 (sqrt):
import math
result = math.sqrt(16) # 16의 제곱근을 계산
print(result) # 결과: 4.0
거듭제곱 (pow):
import math
result = math.pow(2, 3) # 2의 3제곱을 계산
print(result) # 결과: 8.0
로그 (log):
import math
result1 = math.log(10) # 10의 자연로그를 계산
result2 = math.log(100, 10) # 밑이 10인 100의 로그를 계산
print(result1) # 결과: 2.302585092994046
print(result2) # 결과: 2.0
random모듈
임의의 정수 생성 (randint):
import random
result = random.randint(1, 10) # 1부터 10 사이의 임의의 정수 생성
print(result)
리스트에서 무작위 선택 (choice):
import random
items = ['삼성', '애플', '구글']
result = random.choice(items) # items 리스트에서 무작위로 하나 선택
print(result)
리스트 순서 섞기 (shuffle):
import random
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers) # numbers 리스트의 순서를 무작위로 섞음
print(numbers)
임의의 실수 생성 (random):
import random
result = random.random() # 0과 1 사이의 임의의 실수 생성
print(result)
가중치에 따라 선택 (choices):
import random
result = random.choices(['삼성', '애플', '구글'], weights=[3, 1, 1], k=2)
print(result)
collections 모듈:
- collections 모듈은 일반적인 컨테이너 데이터 타입의 확장된 버전을 제공합니다.
Counter:
from collections import Counter
char_count = Counter("Samsung") # 문자열에서 각 문자의 빈도를 세기
print(char_count)
from collections import Counter
# 리스트 요소의 빈도를 세기
word_count = Counter(['삼성', '애플', '삼성', '아마존', '애플', '삼성'])
print(word_count) # 결과: Counter({'삼성': 3, '애플': 2, '아마존': 1})
# 가장 흔한 요소 찾기
most_common_element = word_count.most_common(1)
print(most_common_element) # 결과: [('삼성', 3)]
# 특정 요소의 개수 얻기
apple_count = word_count['애플']
print(apple_count) # 결과: 2
# 요소들의 총 개수 얻기
total_count = sum(word_count.values())
print(total_count) # 결과: 6
sys 모듈
- sys 모듈: 파이썬 인터프리터와 관련된 변수와 함수를 제공합니다. 이를 통해 파이썬 인터프리터에 대한 정보를 얻거나 인터프리터를 제어할 수 있다.
- 주요 기능으로는 argv (명령줄 인자), exit (인터프리터 종료), path (모듈 검색 경로), platform (플랫폼 정보) 등이 있다.
sys.path:
- sys.path는 파이썬 인터프리터가 모듈을 검색할 때 참조하는 디렉토리 목록입니다. 기본적으로 현재 디렉토리, 설치된 파이썬 표준 라이브러리의 디렉토리, 환경변수 PYTHONPATH가 포함된다.
- sys.path는 프로그램 실행 중에 수정할 수 있다. 이를 통해 기본적으로 제공되지 않는 경로에서 모듈을 임포트할 수 있으며, 현재 파일과 같은 폴더뿐만 아니라 컴퓨터에 설치된 다른 모듈에도 접근할 수 있게 해준다.
- sys.path 변경 예제 코드:
- pythonCopy code import sys # 현재 sys.path 출력 print("Before:", sys.path) # 새로운 경로 추가 sys.path.append('~/Documents/Github/sesac-practice') # 변경 후 sys.path 출력 print("After:", sys.path)
이 코드는 새로운 경로를 추가하는 방법을 보여주고 이를 통해 파이썬이 해당 경로에서 모듈을 찾을 수 있게 된다.
OS모듈
- os 모듈: 운영 체제와 상호작용하기 위한 다양한 함수를 제공
- 이 모듈을 사용하면 파일 시스템을 탐색하고, 운영 체제의 환경 설정을 조회하거나 변경하고, 시스템 명령어를 실행할 수 있습니다. 주요 기능으로는 listdir (디렉토리 내의 파일 목록 조회), getcwd (현재 작업 디렉토리 조회), chdir (작업 디렉토리 변경), system (시스템 명령어 실행), environ (환경 변수 접근) 등이 있다..
- 현재 작업 디렉토리 조회 (getcwd) 예제 코드:
- pythonCopy code import os # 현재 작업 디렉토리 경로를 조회 current_directory = os.getcwd() print(current_directory)
이 코드는 os 모듈의 getcwd 함수를 사용하여 현재 프로그램이 실행되고 있는 작업 디렉토리의 경로를 출력한다. 이 기능은 파일 시스템에서 현재 위치를 확인하고 관련 작업을 수행할 때 유용하다.
time 모듈
- 시간 관련 함수 제공
- 예 : sleep, time, ctime, strftime, gmtime 등
실행 지연(sleep)
import time
#특정 시간(초) 동안 프로그램 실행을 지연
time.sleep(5)
print("5초 후에 출력됩니다.")
현재 시간 (time)
#현재 시간을 에포크(epoch) 시간(1970년 1월 1일 0시 0분 0초로부터 경과된 시간)으로 반환
current_time = time.time()
print(current_time)
시간 형식화(strftime)
# 현재 시간을 지정된 형식의 문자열로 변환
local_time = time.localtime()
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
print(formatted_time)
datetime 모듈
- 날짜와 시간을 조작하기 위한 클래스 제공
- 예: datetime , date , time , timedelta , timezone 등
datetime 모듈은 날짜와 시간을 조작하기 위한 다양한 클래스를 제공한다. 이 모듈을 사용하면 날짜, 시간, 시간 간격 등과 관련된 다양한 연산을 수행할 수 있다. 예를 들어, 현재 날짜와 시간을 가져오는 것은 datetime 클래스의 now() 메서드를 사용하여 수행할 수 있다.
다음은 현재 날짜와 시간을 조회하는 간단한 예제 코드이다.:
from datetime import datetime
# 현재 날짜와 시간 가져오기
now = datetime.now()
print(now) # 현재의 날짜와 시간 출력
외부 모듈
외부 모듈
- 외부 모듈은 다른 개발자들이 개발하여 공유하는 파이썬 모듈입니다. 표준 모듈과 달리 추가 기능 제공합니다.
pip
- Python Package Index (PyPI)에서 패키지 설치를 위한 표준 관리자입니다.
- pip install 패키지명 명령어로 외부 모듈 설치 가능합니다.
- 예: pip install requests, pip install numpy
pip install -r requirements.txt
- requirements.txt 파일에 나열된 모든 패키지를 한 번에 설치한다.
- 프로젝트 의존성을 쉽게 관리한다.
만드는 법
- requirements.txt 파일에 패키지 이름과 버전 기록합니다.
- 예: requests==2.25.1, numpy>=1.19.5, pandas
- 이 파일을 프로젝트 루트 디렉토리에 위치시킵니다.
- pip freeze > requirements.txt 명령어로 자동 생성할 수 있습니다.
언제 유용한가?
- 프로젝트 공유 및 협업 시 환경 설정을 빠르게 합니다.
- 배포 시 모든 의존성 포함하여 환경 복제합니다.
- 가상 환경 설정 시 매번 패키지 설치하는 번거로움을 줄입니다.
- Docker, Jenkins 같은 자동화된 배포 툴과 함께 사용됩니다.
가상환경
- 프로젝트별로 독립된 파이썬 환경을 생성합니다.
- 다른 프로젝트에서 다른 모듈 버전 사용 가능합니다.
- virtualenv 모듈로 가상환경 설정합니다.
- sys.path를 확인하여 현재 환경의 모듈 경로를 볼 수 있습니다.
conda
- Anaconda 배포판의 패키지 및 환경 관리자입니다.
- pip와 virtualenv 기능을 동시에 제공합니다.
- 파이썬, R 등 여러 언어의 패키지 및 환경 관리를 지원합니다.
- 데이터 과학, 기계 학습 프로젝트에 적합한 패키지, 라이브러리 제공합니다.
- conda create, conda install 등의 명령어를 사용합니다.
모듈 불러오기
import
- 모듈 전체를 불러오는 방법입니다.
- 사용 예시:
- import math
- print(math.sqrt(16)) - math 모듈의 sqrt 함수 사용
- import 모듈명 형태로 사용합니다.
- 모듈 내 함수나 변수 사용 시 모듈명.함수명 형태로 접근합니다.
from 구문 사용법
- 모듈 내 특정 함수 또는 클래스만 불러오는 방법입니다.
- 사용 예시:
- from math import sqrt
- print(sqrt(16)) - 직접 sqrt 함수 사용
- from 모듈명 import 함수명 형태로 사용합니다.
- 불러온 함수나 클래스를 모듈명 없이 직접 호출 가능합니다.
as 구문 사용법
- 모듈 또는 모듈의 일부에 별칭을 부여하는 방법입니다.
- 사용 예시:
- import math as m
- print(m.sqrt(16)) - 'm'이라는 별칭으로 math 모듈 사용
- import 모듈명 as 별칭 형태로 사용합니다.
- 별칭을 통해 모듈이나 모듈 내의 함수, 클래스에 접근 가능합니다.
네임스페이스(Name Space)와 모듈
네임스페이스 다시 보기
- 네임스페이스는 변수가 저장되는 위치입니다.
- 각 변수는 네임스페이스에 키(key)로 저장됩니다.
- 파이썬은 변수 이름을 키로 사용하여 변수의 메모리 위치를 찾습니다.
- 이를 통해 같은 이름의 변수가 다른 네임스페이스에 존재할 수 있으며, 이로 인해 충돌을 방지합니다.
파이썬에서 모듈이 네임스페이스를 구성하는 방법
- 모듈은 독립적인 네임스페이스를 가집니다.
- 모듈 내에서 정의된 모든 함수, 변수, 클래스는 해당 모듈의 네임스페이스에 속합니다.
- 다른 모듈에서 같은 이름의 변수나 함수를 사용해도 서로 충돌하지 않습니다.
- 이러한 구조는 모듈별로 독립된 작업 영역을 제공하여 코드의 충돌 및 오류를 방지합니다.
예제 코드: 모듈별 네임스페이스 구분
1. 두 개의 다른 모듈에서 동일한 함수 이름 사용
module1.py
pythonCopy code
def greet():
print("Hello from module 1!")
module2.py
pythonCopy code
def greet():
print("Hello from module 2!")
이 예제에서는 두 개의 서로 다른 모듈(**module1.py**와 module2.py)이 있습니다. 각 모듈은 **greet**라는 동일한 이름의 함수를 정의하고 있습니다. 이 경우, 각 함수는 자신이 속한 모듈의 네임스페이스 내에 있기 때문에 서로 충돌하지 않습니다. 예를 들어, **import module1**과 **import module2**를 사용하면, 각 모듈의 greet 함수는 **module1.greet()**과 **module2.greet()**로 각각 접근할 수 있습니다. 이는 파이썬에서 모듈별로 독립된 네임스페이스를 유지하는 방법을 보여줍니다.
현재 네임스페이스 확인하기
파이썬에서 현재 네임스페이스의 이름 확인 방법
- **globals()**와 locals() 함수를 사용해 현재 전역 및 로컬 네임스페이스 확인 가능합니다.
- globals() 함수는 현재 전역 네임스페이스에 정의된 모든 이름(변수, 함수, 클래스 등)과 그 값을 사전 형태로 반환합니다.
예제 코드 1: 전체 네임스페이스 확인
pythonCopy code
# 전역 네임스페이스 확인
print(globals())
이 코드는 현재 전역 네임스페이스에 있는 모든 이름과 값을 출력합니다. 이를 통해 현재 파이썬 환경에서 어떤 변수나 함수, 클래스 등이 정의되어 있는지 확인할 수 있습니다.