모듈과 패키지.py

2023. 3. 20. 02:14·python
## 모듈
# 필요한 기능끼리 부품처럼 잘 만들어진 파일을 의미함.
# 유지보수 및 코드의 재사용이 편리해짐.

import theater_module
# 3명이서 영화를 보러갔을 때 가격 
theater_module.price(3)
theater_module.price_morning(4)
theater_module.price_soldier(5)

# theater_module의 내용을 mv로 호출할 수 있음
import theater_module as mv
mv.price(3)
mv.price_morning(4)
mv.price_soldier(5)

# from random import *
# theater_module을 작성할 필요없이 모든것을 import하겠다는 의미.
from theater_module import *
price(3)
price_morning(4)
price_soldier(5)

# theater_module 에서 필요한 몇몇개의 함수만 쓰겠다는 의미.
# price_soldier 을 호출할 수 없다.
from theater_module import price, price_morning
price(3)
price_morning(4)
try:
    price_soldier(5)
except NameError:
    print("해당 함수는 정의되지 않았습니다.")

# price_soldier 에 price라는 별명을 붙임.
from theater_module import price_soldier as price
# price_soldier이 호출됨
price(3)

theater_module.py 모듈

# 일반 가격
def price(people):
    print("{}명 가격은 {}원 입니다.".format(people, people*10000))

# 조조할인 가격
def price_morning(people):
    print("{}명 조조할인 가격은 {}원 입니다.".format(people, people*6000))

# 군인 할인 가격
def price_soldier(people):
    print("{}명 군인할인 가격은 {}원 입니다.".format(people, people*4000))
  • 모듈이란 필요한 기능끼리 부품처럼 모인, 잘 만들어진 파일을 의미한다.
  • 유지보수 및 코드의 재사용이 편리해짐.
  • 모듈을 호출할 수 있는 방법은 여러가지가 있다.
  • 모듈 내 모든 함수/기능을 호출하는 방법
    ㄴ import 모듈명 : 모듈명.함수 로 모듈 내 함수 기능 호출 가능.
    ㄴ import 모듈명 as 별명 : 모듈에게 별명을 만들어주는 것으로,
                                               별명.함수 로 모듈 내 함수 기능 호출 가능.
    ㄴ from 모듈명 import * : 함수 로 모듈 내 함수 기능 호출 가능.
  • 모듈 내 일부 함수/기능을 호출하는 방법
    ㄴ from 모듈명 import 함수명1, 함수명2 : 모듈 내 함수1, 함수2 만 호출 가능.
    ㄴ from 모듈명 import 함수명1 as 별명 : 함수1 을 별명으로 호출 가능.
## 패키지
# 모듈들을 모아놓은 집합을 의미함.
# import ~ 마지막에 반드시모듈이나 패키지가 와야한다.
# 클래스나 함수는 import를 바로 할 수 없음.
# import travel.thailand.ThailandPackge X
import travel.thailand
trip_to = travel.thailand.ThailandPackage()
trip_to.detail()

# from~import 구문에서는 모듈, 패키지, 함수, 클래스 모두  import 가능.
# from 패키지.모듈 import 클래스
from travel.thailand import ThailandPackage
trip_to = ThailandPackage()
trip_to.detail()

# from 패키지 import 모듈.
from travel import vietnam
trip_to = vietnam.VietnamPackage()
trip_to.detail()

▼ travel 패키지

더보기

init.py

__all__ = ["vietnam", "thailand"]

thailand.py

class ThailandPackage:
    def detail(self):
        print("태국 패키지 3박5일 방콕, 파타야 여행(야시장 투어) 50만원")

## 모듈 직접 설정.
# 패키지/모듈을 만들 때 모듈이 잘 작동되는지 확인해야 함.
# name == main이면, 즉 Thailand.py 에서 코드를 직접 실행했을 때, 
# 해당 문장은 함수호출로 실행하지 않더라도 호출되는 순간 바로 실행된다.
if __name__ == "__main__":
    print("Thailand 모듈을 직접 실행")
    print("이 문장은 모듈을 직접 실행할 때만 실행됩니다.")
    trip_to = ThailandPackage()
    trip_to.detail()
else : 
    print("Thailand 외부에서 모듈 호출")

vietnam.py

class VietnamPackage:
    def detail(self):
        print("[베트남 패키지 3박5일] 다낭 호도여행 60만원")
  • 패키지 : 모듈들을 모아놓은 집합을 의미함.
  • import 로 모듈을 호출하는 경우, 마지막에 반드시 모듈이나 패키지가 와야한다.
    즉, 클래스나 함수는 바로 import 할 수 없다.
  • from~import 구문에서는 모듈, 패키지, 함수, 클래스 모두 import 가능하다.
## __all__
# travel 모듈안의 모든것을 import하겠다는 의미.
# 실제로는 개발자가 문법안에서 공개범위를 설정해야 함.
# 모듈 안의 __init__ 에 `__all__ = ["vietnam", "thailand"]`
from travel import *
trip_to = vietnam.VietnamPackage()
trip_to.detail()

trip_to = thailand.ThailandPackage()
trip_to.detail()
  • from travel import * 은 travel 모듈 안의 모든것을 import하겠다는 의미이다.
  • 하지만 실제로는 개발자가 문법 안에 공개범위를 설정해야 한다.
  • __init__ 을 살펴보면 __all__ = ["vietnam", "thailand"] 이 있는데,
    travel 모듈안의 vietnam과 thailand 를 import할 수 있도록 하겠다는 의미.
## 모듈 직접 설정.
# 패키지/모듈을 만들 때 모듈이 잘 작동되는지 확인해야 함.
# name == main이면, 즉 Thailand.py 에서 코드를 직접 실행했을 때, 
# 해당 문장은 함수호출로 실행하지 않더라도 호출되는 순간 바로 실행된다.
if __name__ == "__main__":
    print("Thailand 모듈을 직접 실행")
    print("이 문장은 모듈을 직접 실행할 때만 실행됩니다.")
    trip_to = ThailandPackage()
    trip_to.detail()
else : 
    print("Thailand 외부에서 모듈 호출")

thailand.py 의 `## 모듈 직접 실행` 부분 참고

  • __name__ == "__main__" 란, 해당 파일 자체를 실행한 경우를 의미한다.
  • 검색결과에 따르면, 파일 안에서 함수를 실행시키면,__name__ 변수에 담기는 것은
    파일, 혹은 모듈의 이름이 아니고, __main__ 이라는 값이 됨.
## 패키지, 모듈 위치
# 그동안 같은 경로에 있는 패키지 모듈 사용해왔음.
# 위치를 모르는 패키지 모듈이 어디에 있는지 확인할 방법
import inspect
import random
print(inspect.getfile(random))
print(inspect.getfile(thailand))
  • inspect.getfile(모듈명) 을 통해 모듈이 어디에 있는지 확인함
## pip installl
# 패키지를 설치할 수 있다.
# pip install 패키지명 : 패키지를 설치할 수 있음.
# pip list : 설치된 패키지 리스트를 받아올 수 있음.
# pip show 패키지명 : 패키지에 대한 정보를 보여줌.
# pip install --upgrade 패키지명 : 해당패키지를 업그레이드 진행함.
# pip uninstall  패키지명 : 패키지 설치 삭제함.
  • pip install 패키지명 : 패키지를 설치할 수 있음.
  • pip list : 설치된 패키지 리스트를 받아올 수 있음.
  • pip show 패키지명 : 패키지에 대한 정보를 보여줌.
  • pip install --upgrade 패키지명 : 해당 패키지 업그레이드 진행함.
  • pip uninstall 패키지명 : 패키지 설치 삭제함.
## 내장함수
# 따로 import할 필요 없이 바로 사용가능한 함수.
# ex) input, print, ...
# dir : 어떤 객체를 넘겨줬을 때, 그 객체가 어떤 변수와 함수를 가지고 있는지 표시.
import random
print(dir())
# random 모듈 내에서 쓸수 있는 것들을 출력함.
print(dir(random))

list = [1,2,3]
# list 모듈 내에서 쓸수 있는 것들이 출력됨
print(dir(list))

name = "조OO"
# string 에서 사용할 수 있는 것들을 출력함.
print(dir(name))
  • 내장함수 란 따로 import 할 필요없이 사용 가능한 함수.
## 외장함수
# 내장함수와 달리 직접 import하여 사용해야하는 것들
# list of pythono modules 검색 후 확인 가능.

# glob : 경로 내 폴더/파일 목록 조회 (윈도우 dir)
import glob
# 확장자가 .py인 모든 파일 조회
print(glob.glob("*.py"))

# os : 운영체제에서 제공하는 기본기능
import os
# 현재 디렉토리 표시
print(os.getcwd())
folder = "sample_dir"

# sample_dir 폴더가 있으면 진행.
if os.path.exists(folder):
    print("이미 존재하는 폴더입니다.")
    # 폴더를 삭제.
    os.rmdir(folder)
    print("폴더를 삭제하였습니다.")
else:
    # 폴더 생성.
    os.makedirs(folder) # 폴더 생성.
    print(folder,"폴더를 생성하였습니다.")

# 현제 디렉토리 내 파일목록을 출력함.
print(os.listdir())

print("--------------import time--------------")
# time : 시간관련 함수
import time
print(time.localtime())
# 원하는 형태로 출력할 수 있음.
print(time.strftime("%Y-%m-%d %H:%M:%S "))

# datetime
import datetime
print("오늘 날짜는 :", datetime.date.today())
td = datetime.timedelta(days=100) # 100일을 저장함.
print("오늘 기준 100일 뒤는", datetime.date.today() + td)
print("오늘 기준 100일 전은", datetime.date.today() - td)
  • 외장함수 : 내장함수와 달리 직접 import하여 사용해야하는 것들
  • 구글에 list of python modules 검색 후 확인할 수 있다.
  • glob : 경로 내 폴더/파일 목록 조회 (윈도우 dir)
    ㄴ glob.glob("*확장자") 로 특정 확장자 파일을 찾을 수 있음.
  • os : 운영체제에서 제공하는 기본기능을 함수로 쓸수있음.
    ㄴ os.getcwd() = 현재 디렉토리 표시
    ㄴ os.path.exist(forder) = forder 이 있는지 확인
    ㄴ os.makedirs(forder) = forder을 생성
    ㄴ os.rmdir(forder) = forder을 삭제
    ㄴ os.listdir() = 현재 디렉토리 내 파일목록을 출력.
  • time : 시간과 관련된 함수.
    ㄴ time.localtime() = 현재 시간을 출력함.
    ㄴ time.strftime() = 시간을 원하는 형태로 출력함.
  • datetime : 날짜와 관련된 함수.
    ㄴ datetime.date.today() = 오늘 날짜 출력
    ㄴ datetime.timedelta(days=n) = n만큼의 날짜를 의미함.
## 퀴즈
'''
프로젝트 내 나만의 시그니처를 남기는 모듈을 만들기.
'''
import byme
byme.sign()
  • byme.py
def sign():
    print("이 프로그램은 `조OO` 에 의해 만들어졌습니다.")
    print("유튜브 : <http://youtube.com>")
    print("이메일 : id@domain.com")
  • byme.py 모듈을 만든 뒤 import byme를 통해 호출.
    ㄴ byme.sign()을 통해 byme모듈의 sign 함수를 호출함.
  • 터미널에 cls를 입력해서 터미널 내용을 clear할수 있음.

'python' 카테고리의 다른 글

예외처리.py  (0) 2023.03.17
클래스.py  (0) 2023.03.17
표준입출력.py  (0) 2023.03.14
함수.py  (0) 2023.03.11
분기.py  (0) 2023.03.11
'python' 카테고리의 다른 글
  • 예외처리.py
  • 클래스.py
  • 표준입출력.py
  • 함수.py
몽자비루
몽자비루
코딩공부 정리용 블로그입니다.
  • 몽자비루
    공부하는 블로그
    몽자비루
  • 전체
    오늘
    어제
    • 분류 전체보기 (170)
      • python (30)
        • python_selenium (16)
        • python_pygame (3)
      • appium (0)
      • 쿠버네티스 (60)
        • linux (8)
        • shell programming (8)
        • docker (18)
        • cka (23)
      • postman&API (16)
      • QA성장하기 (30)
        • 개발자에서 아키텍트로 스터디 (6)
        • 소프트웨어 공학 이해도 높이기 (6)
        • 테스팅 전문 지식 쌓기 (18)
      • 에러일기 (1)
      • Server&load (32)
        • AWS (27)
        • Jmeter (0)
        • load test (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    postman
    리눅스
    .cpu
    로스트아크
    스터디
    linux
    포스트맨
    e2c
    도커
    LOSTARK
    테스트스크립트
    QAKOREA
    애플리케이션로그
    qa
    로스트아크api
    개발자에서아키텍트로
    테스트 계획서
    vi에디터
    테스트 계획서 만들어보기
    cka
    사드웨어리소스
    application log
    네트워크 테스트
    쿠버네티스
    앱공존성
    API
    테스트 결과보고서
    k8s
    공존성테스트
    python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
몽자비루
모듈과 패키지.py
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.