DevSSOM
파이썬 기초 - 패키지 본문
패키지
: 모듈을 폴더(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
- from a import b를 이용해서 random의 randrange()를 불러와봐.
- import a를 이용해서 math 모듈을 불러와봐.
- 변수 var1에 randrange 함수를 이용해 1이상 10이하의 임의의 정수를 넣어봐.
- 변수 var2에 math.log 함수를 이용해 log_{72}{5184}의 값을 넣어봐.
- 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 홈페이지의 정보를 가져와봐.
- from-import를 이용해서 urllib패키지 안 request 모듈에서 urlopen 함수를 불러오는 코드를 작성.
- 다음 주소를 urlopen하고,read()한 다음, 이를 utf-8으로 decode한 결과를 변수 webpage에 넣어봐.
- 변수 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 미만의 수를 임의로 뽑아서 반환해주는 함수
- random 모듈을 import.
- 빈 리스트를 담은 변수 lotto를 만들어봐.
- lotto의 길이가 6이 될 때까지 다음 과정을 수행.
- 1부터 45까지의 수 중 하나를 임의로 뽑아.
- 만약 뽑은 수가 리스트 lotto에 없으면 lotto에 추가하고, 있으면 수를 다시 뽑아.
- pass는 아무런 동작도 하지 않는 코드. if조건 만족 후 아무런 코드도 없다면 오류를 일으키기 때문에 무의미한 pass를 넣어.
- lotto를 정렬해줘.
- 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]
'Python > 기초' 카테고리의 다른 글
파이썬 기초 - 리스트 활용2 (0) | 2021.06.09 |
---|---|
파이썬 기초 - 조건문 (if - elif - else) (0) | 2021.06.09 |
파이썬 기초 - 논리 자료형과 비교연산 (0) | 2021.06.09 |
파이썬 기초 - 모듈 (1) | 2021.06.08 |
파이썬 기초 - 매개변수와 인자 (0) | 2021.06.08 |
파이썬 기초 - 전역변수와 지역변수 (0) | 2021.06.08 |
파이썬 기초 - 메소드 (0) | 2021.06.08 |