[데이터사이언스12기-스터디노트] 파이썬(23.02.15.)

도윤수·2023년 2월 18일
0

Python스터디노트

목록 보기
14/16
post-thumbnail

📝스터디노트 14일차 범위

중급 복습 (모듈, 패키지, site-packages)

📖 모듈제작, 모듈사용

‣ 모듈은 파일자체를 함수처럼 선언하는 형식.
‣ 사용부분은 함수처럼 선언된 파일을 불러다 사용하는 형식.

cm 를 각 선언한 단위로 변환하는 모듈
def cmToMm(n):
    return round(n * 10, 3)

def cmToInch(n):
    return round(n * 0.393, 3)

def cmToM(n):
    return round(n * 0.01, 3)

def cmToFt(n):
    return round(n * 0.032, 3)

if __name__ == ' __main__':
    print(f'10cm: {cmToMm(10)}mm')
    print(f'10cm: {cmToInch(10)}inch')
    print(f'10cm: {cmToM(10)}m')
    print(f'10cm: {cmToFt(10)}ft')
선언한 모듈을 실행하는 실행파일
# cm 길이를 입력하면 각 선언한 단위로 변호나해주는 함수
import unitConversion as uc

if __name__ == '__main__':
    inputNumber = int(input('길이(cm) 입력: '))

    returnValue = uc.cmToMm(inputNumber)
    print(f'{inputNumber}cm : {returnValue}mm')

    returnValue = uc.cmToInch(inputNumber)
    print(f'{inputNumber}cm : {returnValue}inch')

    returnValue = uc.cmToM(inputNumber)
    print(f'{inputNumber}cm : {returnValue}m')

    returnValue = uc.cmToFt(inputNumber)
    print(f'{inputNumber}cm : {returnValue}ft')

모듈을 만들었을떄 이게 올바르게 동작을 하는지 테스트 하기위해 프린트를 할 순 있지만, 그상태로 두게되면 모듈로서 불려갔을때도 실행파이렝서 프린트가 되게되므로 if name == 'main' 을 넣어주어 모듈을 메인으로 실행할 때만 테스트를 프린트하도록 만들어주는 것이 조금 더 완벽한 코드이다.

📖 패키지

‣ 모듈이 1, 2개면 모르겠는데 많아지면 깔끔하게 관리하기 위해서 사용하는 것이 좋다.
‣ 모듈을 모아놓은 것. (파일별로 모아놓는 폴더, 디렉토리 같은 형식)

패키지와 모듈의 차이는 간단하다. 여태 했던 모듈은 실행파일과 모듈파일을 나누어 깔끔하게 파일들을 관리할 수 있었던 것. 하지만 모듈이 많아봤자 덧셈, 뺄셈, 곱셈, 나눗셈 4가지였다. 모듈형 코딩이 대세라 모듈이 조그만 많아져도 헷갈리거나 관리하기가 힘들 수 있다. 그래서 package를 사용하면 깔끔하게 묶어서 관리할 수 있다.

Package는 CalculatorForInt 이고 계산하여 Int 형태로 반환하는 모듈을 모아놓은 패키지이다.

def add(n1, n2):
    return int(n1 + n2)

if __name__ == '__main__':
    print(add(3.14, 1.2))
    
def sub(n1, n2):
    return float(n1 - n2)

if __name__ == '__main__':
    print(sub(3.14, 1.2))
    
def mul(n1, n2):
    return int(n1 * n2)

if __name__ == '__main__':
    print(mul(3.14, 1.2))
    
def div(n1, n2):
    return int(n1 / n2)

if __name__ == '__main__':
    print(div(3.14, 1.2))

패키지안에 깔끔하게 4가지 모듈을 작성해주었고, CalculatorForFloat 패키지도 동일하게 만들어 주었다. 이 모두를 실행할 수 있는 package파일을 만들었다.

'packaged에서 가져오고 싶으면 from 으로 불러온다.'
from CalculatorForInt import addCal
from CalculatorForInt import subCal
from CalculatorForInt import mulCal
from CalculatorForInt import divCal

print(addCal.add(10, 20))
print(subCal.sub(10, 20))
print(mulCal.mul(10, 20))
print(divCal.div(10, 20))

from CalculatorForFloat import addCal
from CalculatorForFloat import subCal
from CalculatorForFloat import mulCal
from CalculatorForFloat import divCal

print(addCal.add(10, 20))
print(subCal.sub(10, 20))
print(mulCal.mul(10, 20))
print(divCal.div(10, 20))

각 모듈엔 메인일떄만 확인할 수 있는 print를 테스트코드로 넣어두었고,
1. 패키지안의 모듈을 불러올 땐 from 패키지로 먼저 패키지를 불러주고,
2. from 패키지 import 모듈로 해당 패키지 안의 모듈을 불러와 실행할 수 있다.
3. Int형 패키지, Float형 패키지의 결과가 10, 20을 입력하였을 때 위와 같이 나온다.

📖 site-packages

‣ 기존에는 나와 동일한 곳에 모듈을 만들어서 사용했었다.
‣ 모듈이 많아지면 패키지로 묶어서 활요했었다.
‣ 다른 디렉토리에 있는 모듈을 활용하고 싶을 때 이것을 사용하면 좋다.


위 사진에 나오는 venv는 virtual environment (가상환경) 이고 이곳의 lib(라이브러리)에 site-packages에 디렉토리 및 파일을 넣어두면 파이썬 환경 어디에서든 해당 모듈을 사용할 수 있다.

예시로 약수와 소수를 구하는 패키지를 통으로 site-packages에 넣고 돌려보았다.


위의 경로로 이동하였고,

def divisor(inputNumber):
    result = [] #결과값을 리스트로 담겠다.
    for number in range(1, (inputNumber + 1)):  #입력값까지 돌릴려면 +1
        if inputNumber % number == 0:
            result.append(number)

    return result

def prime_number(inputNumber):  #소수 구하기
    result = []
    for number in range(2, (inputNumber + 1)):  #여기까진 약수
        flag = True
        for n in range(2, number):  #소수 구하기
            if number % n == 0: #입력값을 나누는 숫자를 2 이상의 수로 나누었을 떄 나누어 떨어지면 약수가 있는 수 이므로 소수가 아니다.
                flag = False    #flag를 False를 주고 위의 for문을 돌아가 다음 약수를 찾는다.
            break

        if(flag):   #flag에서 False를 받지않고 소수로 판정된 친구들은 list에 append된다.
            result.append(number)

    return result

실행파일은 다음과 같이 하였다.

from divisor_pac import divisor_mod as dm

print(f'10의 약수: {dm.divisor(10)}')
print(f'50까지의 소수: {dm.prime_number(50)}')


1. 약수를 구해서 result = [] 로 리스트에 추가하고,
2. prime_number에서 소수를 구해 result [] 로 리스트에 추가하여,
3. 실행파일에 입력값을 주면 위와 같은 결과값을 볼 수 있다.

★ 어려웠던 점 ★
1. 모듈을 선언하는 파일과 실행하는 파일을 나누는 부분.
⇨ 이렇게 함수부분, 실행부분을 잘 나눌줄 알아야 효율적인 코드를 짤 수 있다는 얘기를 보았는데 아직 머릿솔에서는 한화면에 코드를 짜내야 한다는 강박(?) 같은게 있어서 구분이 안되는 것 같다. 이런 형태의 코드를 많이 보다보면 지금까지 해온것 처럼 익숙해져야할 것 같다...

  1. site-packages는 말만 어렵지 그냥 내 노트북이라는 인터넷환경에 올려놓고 검색해다 쓰는 느낌이다.

🔥🔥바쁜시간 쪼개서 매일매일 성장해 나가는 모습을 기록하자🔥🔥

profile
DataScience를 하고 싶은 DoIT

0개의 댓글