12.3 from import로 모듈의 일부만 가져오기

모듈의 새 이름을 지정하는 방법보다 좀더 편한 방법이 있습니다. 이번에는 from import로 원하는 변수만 가져와보겠습니다.

  • from 모듈 import 변수
>>> from math import pi    # math 모듈에서 변수 pi만 가져옴
>>> pi                     # pi를 바로 사용하여 원주율 출력
3.141592653589793

from math import pi와 같이 from 뒤에 모듈 이름을 지정하고 import 뒤에 가져올 변수를 입력합니다. 이후 가져온 변수를 사용할 때는 pi와 같이 모듈 이름을 붙이지 않고 바로 사용하면 됩니다.

모듈의 변수를 가져왔으니 이번에는 함수를 가져와보겠습니다(아직 클래스는 배우지는 않았지만 클래스도 가져올 수 있습니다)

  • from 모듈 import 함수
  • from 모듈 import 클래스
>>> from math import sqrt    # math 모듈에서 sqrt 함수만 가져옴
>>> sqrt(4.0)                # sqrt 함수를 바로 사용
2.0
>>> sqrt(2.0)                # sqrt 함수를 바로 사용
1.4142135623730951

math 모듈에서 sqrt 함수만 가져왔으므로 sqrt(4.0)처럼 math를 붙이지 않고 함수를 바로 사용할 수 있습니다.

지금까지 변수나 함수를 하나만 가져왔습니다. 하지만 math 모듈에서 가져올 변수와 함수가 여러 개일 수도 있겠죠? 이때는 import 뒤에 가져올 변수, 함수, 클래스를 콤마로 구분하여 여러 개를 지정해주면 됩니다.

  • from 모듈 import 변수, 함수, 클래스
>>> from math import pi, sqrt   # math 모듈에서 pi, sqrt를 가져옴
>>> pi                           
# pi로 원주율 출력
3.141592653589793
>>> sqrt(4.0)                    # sqrt 함수 사용
2.0
>>> sqrt(2.0)                  # sqrt 함수 사용
1.4142135623730951

from math import pi, sqrt와 같이 pisqrt 두 개를 가져왔습니다. 하지만 변수와 함수가 두세 개라면 괜찮지만 수십 개가 된다면 입력하기가 상당히 번거롭겠죠?

from import는 모듈의 모든 변수, 함수, 클래스를 가져오는 기능도 있습니다.

  • from 모듈 import *
>>> from math import *    # math 모듈의 모든 변수, 함수, 클래스를 가져옴
>>> pi                    # pi로 원주율 출력
3.141592653589793
>>> sqrt(4.0)             # sqrt 함수 사용
2.0
>>> sqrt(2.0)             # sqrt 함수 사용
1.4142135623730951

from math import *와 같이 지정하면 math 모듈의 모든 함수, 변수, 클래스를 가져옵니다(보통 컴퓨터에서 *(asterisk, 애스터리스크) 기호는 모든 것이라는 뜻으로 사용합니다).

from import로 패키지의 모듈에서 변수, 함수, 클래스를 가져오는 방법도 앞에서 설명한 규칙과 같습니다. 다음은 urllib 패키지의 request 모듈에서 urlopen 함수와 Request 클래스를 가져옵니다.

  • from 패키지.모듈 import 변수
  • from 패키지.모듈 import 함수
  • from 패키지.모듈 import 클래스
  • from 패키지.모듈 import 변수, 함수, 클래스
  • from 패키지.모듈 import *
>>> from urllib.request import Request, urlopen    # urlopen 함수, Request 클래스를 가져옴
>>> req = Request('http://www.google.co.kr')       # Request 클래스를 사용하여 req 생성
>>> response = urlopen(req)                       # urlopen 함수 사용
>>> response.status
200

참고로 urlopen 함수에 URL을 바로 넣어도 되고, Request('http://www.google.co.kr')와 같이 Request 클래스에 URL을 넣은 뒤에 req를 생성해서 urlopen 함수에 넣어도 됩니다.

패키지의 모듈에서 모든 변수, 함수, 클래스를 가져오는 방법은 다음과 같습니다.

>>> from urllib.request import *     # urllib의 request 모듈에서 모든 변수, 함수, 클래스를 가져옴
>>> req = Request('http://www.google.co.kr')    # Request를 사용하여 req 생성
>>>response = urlopen(req)                     # urlopen 함수 사용
>>> response.status
200

이번에는 from import로 변수, 함수, 클래스를 가져온 뒤 새 이름을 지정해보겠습니다.

  • from 모듈 import 변수 as 새이름
  • from 모듈 import 함수 as 새이름
  • from 모듈 import 클래스 as 새이름
>>> from math import sqrt as s    # math 모듈에서 sqrt 함수를 가져오면서 s로 새 이름 지정
>>> s(4.0)                        # s로 sqrt 함수 사용
2.0
>>> s(2.0)                        # s로 sqrt 함수 사용
1.4142135623730951

import로 가져온 변수, 함수, 클래스 뒤에 as로 새 이름을 지정해주면 됩니다. 그럼 여러 개를 가져왔을 때 각각 새 이름을 지정할 수는 없을까요?

이때는 각 변수, 함수, 클래스 등을 콤마로 구분하여 여러 개를 지정하면 됩니다.

>>> from math import pi as p, sqrt as s
>>> p         # p로 원주율 출력
3.141592653589793
>>> s(4.0)    # s로 sqrt 함수 사용
2.0
>>> s(2.0)    # s로 sqrt 함수 사용
1.4142135623730951

pi as p, sqrt as s와 같이 콤마로 구분하면서 새 이름을 지정했습니다.

from import로 패키지의 모듈에서 변수, 함수, 클래스를 가져온 뒤 새 이름을 지정하는 것도 방법은 같습니다.

  • from 패키지.모듈 import 변수 as 새이름
  • from 패키지.모듈 import 변수 as 새이름, 함수 as 새이름, 클래스 as 새이름
>>> from urllib.request import Request as r, urlopen as u
>>> req = r('http://www.google.co.kr')    # r로 Request 클래스 사용
>>> response = u(req)                     # u로 urlopen 함수 사용
>>> response.status
200
참고 | 가져온 모듈 해제하기, 다시 가져오기

import로 가져온 모듈(변수, 함수, 클래스)은 del로 해제할 수 있습니다.

>>> import math
>>> del math

모듈을 다시 가져오려면 importlib.reload를 사용합니다.

>>> import importlib
>>> import math
>>> importlib.reload(math)