SESAC LLM 개발자 강의/Python

[sesac LLM] day8-240111 Python 모듈

잇연 2024. 1. 12. 09:32

복습

퀴즈

  • 인수(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()
  1. my_decorator 함수는 다른 함수를 매개변수로 받아 래퍼 함수 **wrapper**를 반환한다.
  2. wrapper 함수는 주어진 함수를 감싸고, 실행하기 전과 후에 추가적인 동작을 수행한다.
  3. @my_decorator 데코레이터를 사용하여 say_hello 함수에 데코레이터를 적용한다.
  4. say_hello 함수를 호출하면 실제로는 **my_decorator**에 의해 생성된 wrapper 함수가 실행된다.
  5. 실행 전과 후에 추가적인 메시지가 출력되어 확장된 동작을 확인할 수 있다.

이렇게 데코레이터를 사용하면 함수의 기능을 확장하거나 수정하기 위해 코드 중복을 피하고 코드를 더 간결하게 유지할 수 있다.


모듈

퀴즈

  1. 파이썬에서 모듈은 .py 로 끝나는 파일을 의미한다. (True, False) ⇒ True
  2. 모듈을 불러 올 때 사용하는 키워드는? ⇒ 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 파일에 나열된 모든 패키지를 한 번에 설치한다.
  • 프로젝트 의존성을 쉽게 관리한다.

만드는 법

  1. requirements.txt 파일에 패키지 이름과 버전 기록합니다.
    • 예: requests==2.25.1, numpy>=1.19.5, pandas
  2. 이 파일을 프로젝트 루트 디렉토리에 위치시킵니다.
  3. 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())

이 코드는 현재 전역 네임스페이스에 있는 모든 이름과 값을 출력합니다. 이를 통해 현재 파이썬 환경에서 어떤 변수나 함수, 클래스 등이 정의되어 있는지 확인할 수 있습니다.