코드의 길이가 길어지는 상황
이 때, 모든 함수·변수를 구현하는 것은 불가능
-> 누군가 만들어 놓은 함수, 변수 등을 활용하자!
ex) 우리가 레고로 무언가 만들 때 이미 만들어진 블럭을 활용함.
이 때 쓰는 블럭이 모듈과 같음.
특정 목적을 가진 함수, 자료의 모임
import
(불러오다) 키워드를 이용하여 모듈 사용import random
# random 모듈 불러오기
모듈 속 사용하려는 함수/변수의 사용법 확인.
random.randrange(start, stop)
이 함수를 살펴보자.
여기서 random
은 모듈, .randomrange()
는 함수이고,
괄호 안에 있는 start
와 stop
은 변수이다.
처음 시작하는 수인 start
와 끝나는 마지막 지점에 있는 수 stop
을 넣고 그 범위 안에서 랜덤하게 한 원소를 가지고 온다.
모듈 사용법을 확인했으니 본격적으로 사용법을 익혀보자.
.(dot)
을 쓴 후에 모듈 속 함수/변수 사용.(dot)
을 이용해 함수에 접근 하는 것을 "점 표기법(Dot notation)"이라고 함.A모듈.B함수
라고 표기함.import random
print(radom.randrange(0,2)) # 0이상 2미만의 수 중 임의로 출력
그렇다면 원하는 모듈이 없다면 어떻게 하면 좋을까?
우리가 원하는 내용이 담긴 모듈을 제작하면 된다.
.py(파이썬 파일
로 모듈 만들기 가능.# cal.py -> 하나의 모듈!
def plus(a, b):
c = a+b
return c
# main.py -> 하나의 모듈!. main.py는 보통 우리가 파이썬 프로그램을 처음 실행할 때 보이는 화면.
import cal # cal 모듈을 불러와라는 뜻.
# main.py
import cal
print(cal.plus(3,4)) # cal 모듈의 plus 함수를 사용하겠다! | 출력: 7
cal.py
모듈은 계산기 기능이 담긴 모듈입니다. 이 안에는 plus() 와 minus() 함수가 있고, 모델명이 담긴 변수 modelName이 있습니다. 실습에서 직접 이cal.py
를 만들어보고,main.py
에서 이를 불러와봅시다.
cal.py
파일을 열고, a,b를 인자로 갖는 함수 plus, minus를 정의해봅니다.cal.py
파일에서 변수 modelName을 만들고 ‘ELI-C2’를 대입해봅시다.
main.py
파일을 열고, import cal
을 이용해 저장된 모듈 cal을 불러와봅시다.
변수 var1에 모듈 cal의 모델이름(modelName)을 넣어봅시다.
변수 var2에 모듈 cal의 plus 함수를 이용해서 3+4
의 값을 넣어봅시다.
변수 var3에 모듈 cal의 minus 함수를 이용해서 7-2
의 값을 넣어봅시다.
var1, var2, var3의 값을 출력하여 확인해봅시다.
# cal.py
def plus(a, b): # 1번
return a+b
def minus(a, b):
return a-b
modelName = 'ELI-C2' # 2번
# main.py
import cal # 3번
var1 = cal.modelName # 4번
var2 = cal.plus(3,4) # 5번
var3 = cal.minus(7,2) # 6번
## 변수의 값을 확인하는 출력문입니다.
print(var1, var2, var3) # 7번
ELI-C2 7 5
-> 모듈을 편리하게 관리하기 위해서!
위 사진 속 폴더 안에는 다 각자의 파이썬 파일(.py)이 들어가 있음.
분류하여 찾기 쉽도록 패키지를 사용함.
다음과 같이 모듈이 있을 때, 이를 사용하는 방법은?
방법 1. import
를 이용해서 폴더를 불러온 후, 함수 실행
import user.cal # user라는 폴더 안에 cal이라는 모듈을 불러와라. import는 폴더를 불러오는 것도 가능함.
print(cal.plus(3, 4)) # cal 모듈의 plus 함수를 사용하겠다. 이후 반환값을 출력하겠다.
from (패키지.)모듈 import 함수
사용.
을 써주지 않아도 된다..
을 빼면 컴퓨터 입장에선 혼동이 일어나기 때문에 명확히 명시해주자!from user.cal import plus # user 안에 있는 cal 모듈로부터 plus함수를 불러와라.
print(plus(3,4)) # cal.plus()라고 적어주지 않아도 된다.
from a import b
: a 모듈(혹은 패키지)에서 b함수를 가져오겠다. b를 사용하기 위해선 b() 꼴로 사용 가능.import a
: a 모듈을 불러오겠다. a 모듈 안에 있는 b함수를 사용하기 위해선 a.b() 꼴로 사용해야 함. 앞에서 배웠던 두 모듈 - random과 math를 다르게 불러와보자.
from a import b
를 이용해서 random의 randrange()
를 불러와봅시다.
import a
를 이용해서 math 모듈을 불러와봅시다.
변수 var1에 randrange
함수를 이용해 1이상 10이하의 임의의 정수를 넣어봅시다.
변수 var2에 math.log
함수를 이용해 log72(5184)의 값을 넣어봅시다.
var1, var2를 출력하여 결과값을 확인해봅시다.
from random import randrange # 1번
import math # 2번
var1 = randrange(1,11) # 3번
var2 = math.log(5184, 72) # 4번
print(var1, var2) # 5번 | 출력: 10, 2.0
Python에서는 쉽게 웹페이지의 정보를 가져올 수 있는
urllib
패키지를 제공합니다. 이 중에서urllib.request.urlopen
함수는 해당 url의html
파일을 가져옵니다.
위 함수를 이용해서https://en.wikipedia.org/wiki/Lorem_ipsum
홈페이지의 정보를 가져와봅시다.
TIP✍
urlopen()
: 이 함수에 url을 넣으면 해당 url에 접근한 결과를 얻을 수 있습니다.
read()
: 결과를 해독하여 문자열로 반환합니다.
decode()
: 문자열을 특정 인코딩 방식으로 해독합니다. (유니코드, 아스키 코드 등)
함수는 .
을 사용하여 여러개를 한 번에 사용할 수 있다.
A().B().C()
주소 등은 문자이므로 함수 안에 넣을 때 " "
을 사용해준다.
from-import
를 이용해서 urllib패키지 안 request 모듈에서 urlopen 함수를 불러오는 코드를 작성해봅시다.
다음 주소를 urlopen
하고, read()
한 다음, 이를 utf-8으로 decode
한 결과를 변수 webpage에 넣어봅시다.
주소: https://en.wikipedia.org/wiki/Lorem_ipsum
변수 webpage를 출력해봅시다. 무엇이 나오나요?
from urllib.request import urlopen # 1번
webpage = urlopen("https://en.wikipedia.org/wiki/Lorem_ipsum").read().decode("utf-8") # 2번. 여러 함수를 연결할 때는 `Dot(.)`을 이용하자.
print(webpage) # 3번
<!DOCTYPE html>
<html class="client-nojs" lang="en" dir="ltr">
<head>
<meta charset="UTF-8"/>
<title>Lorem ipsum - Wikipedia</title>
<script>document.documentElement.className="client-js";RLCONF={"wgBreakFrames":!1,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"4b8f7436-2113-4b54-b0d6-174dec92358f","wgCSPNonce":!1,"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":!1,"wgNamespaceNumber":0,"wgPageName":"Lorem_ipsum","wgTitle":"Lorem ipsum","wgCurRevisionId":1048686824,"wgRevisionId":1048686824,"wgArticleId":190246,"wgIsArticle":!0,"wgIsRedirect":!1,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["CS1 maint: unfit URL","CS1 Latin-language sources (la)","Articles with short description","Short description is different from Wikidata","Articles containing Latin-language text","Wikipedia articles containing placeholders","Articles containing Interlingue-language text",
"Pages using Sister project links with default search","Filler text","Latin words and phrases","Nonsense","Cicero"],"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Lorem_ipsum","wgRelevantArticleId":190246,"wgIsProbablyEditable":!0,"wgRelevantPageIsProbablyEditable":!0,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgFlaggedRevsParams":{"tags":{"status":{"levels":-1}}},"wgMediaViewerOnClick":!0,"wgMediaViewerEnabledByDefault":!0,"wgPopupsFlags":10,"wgVisualEditor":
.
.
.