파이썬 모듈 import
PI = 3.14
def ar_circle(rad):
return rad * rad* PI #원의 넓이를 계산해서 반환하는 함수
def ci_circle(rad):
return rad * 2 * PI #원의 둘레를 계산해서 반환하는 함수
원래는 이렇게 함수를 만들고 main()을 통해 만든 함수를 실행시켰었다
하지만 위의 코드는 main() 함수를 쓰지 않고 함수의 정의 두 개만 있다
이렇게 두 개의 함수만 존재한다는 것은 함수를 실행의 중심으로 두려는 것이 아니라
어떤 프로그램에 제공하기 위한 것이라는 것이다.
담아 놓은 내용이 실행의 흐름이 아니라 다른 프로그램에서 가져다 쓸 수 있는
내용들로 채워져있으면 그것을 모듈이라고 한다.
즉 모듈은 파이썬 입장에서 가져다 쓸 수 있는 부품을 뜻한다.
지금부터 위 코드를 따로 폴더에 circle.py로 저장해놨다고 가정한다.
import circle #폴더에 저장된 circle.py 모듈을 가져다 쓰겠다는 선언이다. [.py]는 생략하고 써야함
def main():
r = float(input("반지름 입력: "))
ar = circle.ar_circle(r) #circle.py 모듈안에 있는 ar_circle 함수 호출
print("넓이",ar)
ci = circle.ci_circle(r) #circle.py 모듈안에 있는 ci_circle 함수 호출
print("둘레",ci)
main()
[import + 모듈이름]을 선언하면 이 위치에 그 모듈이 존재한다고 생각하면 된다.
물론 실제로 들어오는 건 아니다.
from circle import ar_circle
from circle import ci_circle
[circle 모듈로부터 ar_circle를 import 하겠다]
[circle 모듈로부터 ci_circle를 import 하겠다]
라는 뜻이고, 이런 식으로 함수단위의 선언도 가능하다.
def main():
r = float(input("반지름 입력: "))
ar = ar_circle(r) #circle.py의 ar_circle 함수 호출
print("넓이",ar)
ci = ci_circle(r) #circle.py의 ci_circle 함수 호출
print("둘레",ci)
main()
함수 단위의 import의 장점은 위치정보를 생략해도 된다.
모듈 전체를 import 했을 때 ar = circle.ar_circle(r) 라고 쓰던걸
함수 단위로 호출했을 때는 ar = ar_circle(r) 이렇게 썼다.
두 가지 방법은 상황에 따라 장단점이 다르기에 자유롭게 쓰면 된다.
from circle import ar_circle
from circle import ci_circle
from circle import ar_circle,ci_circle
위쪽 같이 같은 모듈로부터 온 두 개의 함수는 아래쪽 코드 처럼한번에 써도 괜찮다.
def ci_circle(rad):
return rad * 2 * PI
circle 모듈은 위의 코드라고 가정한다.
from circle import ci_circle
def ci_circle(rad):
print("둘레", rad * 2 * 3.14)
def main():
r = float(input("반지름 입력: " ))
print(ci_circle(r)) #cricle 모듈의 rad * 2 * PI를 출력
print(ci_circle(r)) #ci_circle(rad)함수의 print("둘레", rad * 2 * 3.14) 출력
위의 경우에 만들어 놓은 함수와 불러올 모듈의 함수 이름이 겹치게 된다.
이런 상황에서는 파이썬이 이름 구분 할 수 없기 때문에 함수를 호출하는 순간에 오류가 생긴다.
이럴 때 해결하는 방법이 바로 as를 통해 이름을 바꾸는 것이다.
from circle import ci_circle as cc
def ci_circle(rad):
print("둘레", rad * 2 * 3.14)
def main():
r = float(input("반지름 입력: " ))
print(cc(r)) #cricle 모듈의 rad * 2 * PI를 출력
print(ci_circle(r)) #ci_circle(rad)함수의 print("둘레", rad * 2 * 3.14) 출력
[from + 모듈 + import + 모듈의 함수 이름 + as + 바꿀 모듈의 함수 이름]
즉 circle라는 모듈로부터 ci_circle함수를 호출하는데 그 이름을 cc로 바꾸겠다는 소리이다.
이렇게 되면 이름이 겹치지 않기에 오류가 발생하지 않는다.
as를 통해 이름을 바꾸면, 모듈 내부 함수의 이름이 완전히 변경되는 것이 아니라
가져다 쓰는 동안에만 바뀌는 것이다. 원본은 안 변한다고 생각하자.
import circle as cc
def main():
ar = cc.ar.circle(r)
...
이렇게 모듈 전체를 import 할 때, 이름을 변경해도 된다.
빌트인함수 : import 선언 없이 그냥 언제든 호출 가능한 함수
빌트인 모듈 : 위치 신경 쓰지 않고 언제든 import 할 수 있는 모듈
즉 파이썬에 기본적으로 있음
빌트인 함수의 예시 중 일부로는 print와 input 등이 있고,
빌트인 모듈의 예시 중 하나로는 math가 있다
import math #빌트인 모듈 중 하나인 math를 선언
print(math.fabs(-10)) #fabs()는 전달된 값의 절대 값을 반환해 준다. 즉 10이 출력
ex)
math.sin(x) #sin x
math.cos(x) #cos x
math.tan(x) #tan x
. . .