프로그래밍 언어/파이썬 기초

파이썬 모듈 import

tteokbokki-master 2023. 5. 23. 08:00
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
. . .