반응형
Notice
Recent Posts
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Today
Total
관리 메뉴

오식랜드

[python] module 본문

dev-log/python

[python] module

개발하는 오식이 2023. 1. 12. 15:00
반응형

module

모듈 만들기

ramdom모듈과 같이 외부 모듈을 가져다가 사용할 수도 있지만, 직접 만들 수도 있다!

영화표 가격을 계산해주는 모듈을 만들어보자

theater_module.py 라는 이름으로 파일을 하나 만들고 그 안에 함수를 만들어준다

이 파일에는 사람 수에 따른 영화표 가격을 계산해주는 3개 함수를 정의 할 것이다.

각 함수는 사람 수를 의미하는 people 을 전달받으며, 1인당 영화표 가격은 아래와 같이 계산한다.

  1. price() 함수에서는 일반 가격인 10,000원
  2. price_morning() 에서는 조조 할인 가격인 6,000원
  3. price_soldier() 에서는 군인 할인 가격인 4,000원
#일반 가격
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 를 먼저 보겠습니다.

import 구문을 쓸 때는 파일명 theater_module.py 에서 확장자 .py 를 제외한 모듈 이름 theater_module 을 그대로 적어주면 됩니다.

import 를 한 이후부터는 이 모듈에 정의한 함수를 사용할 수 있는데 모듈명 뒤에 점(.) 을 찍고 나서 함수 이름을 적습니다.

3개 함수를 각각 호출하며 전달값은 3, 4, 5 로 해보겠습니다.

import theater_module # theater_module 을 가져다가 사용

theater_module.price(3) # 3명이 영화 보러 갔을 때 가격
theater_module.price_morning(4) # 4명이 조조 영화 보러 갔을 때
theater_module.price_soldier(5) # 5명이 군인이 영화 보러 갔을 때

결과는 아래와 같습니다.

3명 가격은 30000원 입니다.

4명 조조 할인 가격은 24000원 입니다.

5명 군인 할인 가격은 20000원 입니다.


  • import as

그런데 theater_module 이라는 이름이 다소 길어서 모듈을 사용할 때마다 불편하기도 합니다.

이럴 때는 as 를 이용해서 모듈에 별명을 붙여줄 수 있습니다.

영화는 영어로 movie 인데 이것도 길어 보이니 편의상 mv 라는 별명을 짓도록 하겠습니다.

import 구문 뒤에 as mv 를 붙여서 theater_module 이라는 이름을 이제는 mv 로 간편하게 호출할 수 있습니다

import theater_module as mv# theater_module 을 가져다가 mv라는 이름으로 사용

mv.price(3) # 3명이 영화 보러 갔을 때 가격
mv.price_morning(4) # 4명이 조조 영화 보러 갔을 때
mv.price_soldier(5) # 5명이 군인이 영화 보러 갔을 때

실행 결과는 동일합니다.

3명 가격은 30000원 입니다.

4명 조조 할인 가격은 24000원 입니다.

5명 군인 할인 가격은 20000원 입니다.


  • from import

이번에는 from ~ import 구문을 써보겠습니다.

앞에서 이미 우리는 random 모듈을 사용할 때 이 구문을 연습해봤었는데요.

from random import *

from 뒤에 모듈 이름을 적고 그 모듈 내에서 가져다가 사용할 부분을 import 뒤에 적어주면 됩니다.

우선은 **모든 부분을 가져다 쓴다는 의미로 *** 을 적어보겠습니다.

from ~ import 구문을 통해 가져온 모듈은 모듈명과 점(.) 부분을 적어줄 필요 없이 모듈 내의 함수 이름을 그대로 적으면 됩니다.

from theater_module import * # theater_module 내에서 모든 것을 가져다가 사용

price(3) # theater_module. 필요 없음
price_morning(4)
price_soldier(5)

그런데 때로는 모듈 내에 정의된 모든 내용을 가져다 쓰지 않고 필요한 것만 가져다가 써야할 때도 있습니다.

예를 들어서 이미 군대를 전역한 사람이라면 군인 할인 가격에 해당하는 price_soldier() 함수는 아무런 쓸모가 없겠지요.

이 때는 from ~ import 구문 뒤에 * 대신 사용하고자 하는 부분만 콤마(,)로 구분하여 적으면 됩니다.

일반 가격인 price() 와 조조 할인 가격인 price_morning() 만 가져와보겠습니다.

이번에는 사람 수를 5, 6, 7 로 하여 3개 함수를 모두 호출해보겠습니다.

from theater_module import price, price_morning # 모듈에서 일부만 가져다가 사용
price(5) # 이번에는 5명
price_morning(6)
price_soldier(7) # import 하지 않았으므로 사용 불가

실행시켜보니 price() 와 price_morning() 은 정상적으로 결과가 출력되는데 price_soldier() 부분은 import 를 하지 않았으므로 정의되지 않은 이름이라고 하며 에러가 발생하는 것을 확인할 수 있습니다.

5명 가격은 50000원 입니다. 6명 조조 할인 가격은 36000원 입니다. Traceback (most recent call last):  File "파일 경로", line 23, in <module>    price_soldier(7)NameError: name 'price_soldier' is not defined


  • from import as

마지막으로 from ~ import 구문에도 as 를 적용하여 별명을 지어주는 연습을 해보겠습니다.

from ~ import 구문에도 as 를 이용하여 별명을 지어줄 수 있습니다.

다음과 같이 코드를 작성하고 from ~ import 구문 뒤에 as price 를 적어주면 코드에서는 price() 라는 이름으로 모듈 내 함수에 접근할 수 있으며 이 때 실제로 호출되는 함수는 theater_module 내의 price() 가 아닌 price_solder() 가 됩니다.

from theater_module import price_soldier as price # price_soldier 를 새로운 별명인 price 로 사용
price(5) # price_soldier() 를 호출

실행 결과는 다음과 같습니다.

5명 군인 할인 가격은 20000원 입니다.

 

출처 : https://nadocoding.tistory.com/

반응형

'dev-log > python' 카테고리의 다른 글

[python] module 직접 실행  (0) 2023.01.12
[python] package  (0) 2023.01.12
[python] class  (0) 2023.01.12
[python] 파일 입출력  (0) 2023.01.09
[python] 입출력  (0) 2023.01.09
Comments