DevSSOM

파이썬 기초 - 패키지 본문

Python/기초

파이썬 기초 - 패키지

데브쏨 2021. 6. 9. 12:00
반응형

패키지

: 모듈을 폴더(Directory)로 구분해서 관리하는 것

project/
    script/
    sound/
    audio/
    ...
# 프로젝트라고 하는 폴더 안에 스크립트, 사운드, 오디오라는 폴더가 있어
# 그리고 폴더를 쭉쭉 들어가면 .py 라는 여러 파일들이 있을거야.
# 이때 .py가 모듈이고
# 모듈들을 폴더로,  계층적으로 관리하는게 패키지

 

Q. 왜 패키지가 필요한데?

모듈을 편리하게 관리하기 위해서임.

파이썬 파일을 관리할 때 어떤 애들은 이미지 관리하고, 어떤 애들은 공지사항 관리하고, 어떤 애들은 뉴스 관리할 때 쓰인다고 해. 근데, 얘네가 한 폴더 안에 중구난방으로 있으면 복잡하고 사용하기에 번거로워지잖아. 그래서 비슷한 애들끼리 폴더로 묶어서 넣어줘.

 

Q. 모듈 vs 패키지?

- 모듈 : 변수와 함수, 코드를 모아둔 하나의 .py 파일

- 패키지 : 폴더(디렉토리)와 모듈로 구성되는 세트

 

 

패키지 속 모듈 사용하기

예를 들어, user라는 폴더에 cal이라는 모듈이 있고, plus()라는 함수가 있을 때

    - 방법 1. import를 이용해서 폴더를 불러온 후, 함수 실행할 수 있고

import user.cal
# user라는 폴더 안에 있는 cal 모듈을 불러오겠다는 것

print(cal.plus(3, 4))  # 7

    - 방법 2. from-import 사용해서 할 수도 있어. 그러면 함수나 변수 사용시 .(점)을 써주지 않아도 됨.

from user.cal import plus
# user 폴더 안에 있는 cal 모듈로부터 plus라고 하는 함수를 가져오겠다는 것
# 이때 모듈은 어떤 폴더 안의 모듈인지 전부 명시를 해줘야돼
# 이 방법을 사용할 때 가장 좋은 점은
# 함수를 사용할 때 cal.plus()라고 적어주지 않아도 돼. 그냥 plus() 그대로 써

print(plus(3, 4))  # 7

# 그런데, 주의할 점이 있어. 만약에
from user.cal import plus 
# 이 구문이 있기 전에 또다른 plus 함수가 있었다면
# 어떤 함수를 쓰는건지 모르니까 이름이 겹치지 않게 주의해줘야 됨

 

 

연습문제 1

  1. from a import b를 이용해서 random의 randrange()를 불러와봐.
  2. import a를 이용해서 math 모듈을 불러와봐.
  3. 변수 var1에 randrange 함수를 이용해 1이상 10이하의 임의의 정수를 넣어봐.
  4. 변수 var2에 math.log 함수를 이용해 log_{72}{5184}의 값을 넣어봐.
  5. var1, var2를 출력하여 결과값을 확인.
from random import randrange
# 이때 함수를 불러올 땐 괄호()를 써주지 않아. 함수 이름만 써.
import math

var1 = randrange(1, 11)
var2 = math.log(5184, 72)

print(var1, var2)

 

연습문제 2

Python에서는 쉽게 웹페이지의 정보를 가져올 수 있는 urllib패키지를 제공해. 이 중에서 urllib.request.urlope 함수는 해당 url의 html 파일을 가져와. 위 함수를 이용해서 https://en.wikipedia.org/wiki/Lorem_ipsum 홈페이지의 정보를 가져와봐.

  1. from-import를 이용해서 urllib패키지 안 request 모듈에서 urlopen 함수를 불러오는 코드를 작성.
  2. 다음 주소를 urlopen하고,read()한 다음, 이를 utf-8으로 decode한 결과를 변수 webpage에 넣어봐.
  3. 변수 webpage를 출력해보면 뭐가 나옴?
  • urlopen() : 이 함수에 url을 넣으면 해당 url에 접근한 결과를 얻을 수 있습니다.
  • read() : 결과를 해독하여 문자열로 반환합니다.
  • decode() : 문자열을 특정 인코딩 방식으로 해독합니다. (유니코드, 아스키 코드 등)
from urllib.request import urlopen

var = urlopen("https://en.wikipedia.org/wiki/Lorem_ipsum").read().decode("utf-8")
# urlopen이라는 값에 대해서 어떤 일을 할 때는 그 뒤에 모듈을 바로 붙여주면 돼. .read() 바로 오게
# .decode()도 마찬가지

print(var)  # 결과값은 복잡해서 생략

 

연습문제 3 : 로또 번호 추첨기

로또 게임은 1부터 45까지의 숫자 중 임의의 6개의 수를 맞추는 게임. randrange()를 이용해서 로또 추첨기를 만들어봐. random 모듈에는 수를 임의로 추출할 수 있는 함수 randrange()가 존재.

  • random.randrange(a, b) : a 이상 b 미만의 수를 임의로 뽑아서 반환해주는 함수
  1. random 모듈을 import.
  2. 빈 리스트를 담은 변수 lotto를 만들어봐.
  3. lotto의 길이가 6이 될 때까지 다음 과정을 수행.
    • 1부터 45까지의 수 중 하나를 임의로 뽑아.
    • 만약 뽑은 수가 리스트 lotto에 없으면 lotto에 추가하고, 있으면 수를 다시 뽑아.
    • pass는 아무런 동작도 하지 않는 코드. if조건 만족 후 아무런 코드도 없다면 오류를 일으키기 때문에 무의미한 pass를 넣어.
  4. lotto를 정렬해줘.
  5. lotto를 출력하여 뽑은 로또번호를 확인.
import random

lotto = []
while len(lotto) < 6:
    num = random.randrange(1, 46)
    if num in lotto:
        pass
    else: # num이 lotto에 없으면?
        lotto.append(num)

lotto.sort()
print(lotto)   # [2, 9, 10, 11, 20, 41]

 

728x90
반응형
댓글