Python/파이썬 기초

파이썬 import와 from import의 사용 방법 비교, 구분 이유

jimmy_AI 2022. 2. 23. 23:09
반응형

import X vs from X import *

안녕하세요. 이번 글에서는 파이썬의 패키지를 불러오는 import 문법과

from import 문법의 용법 차이와 두 용법을 구분하여 사용하는 이유에 대하여

간략하게 살펴보도록 하겠습니다.

 

 

import : 패키지 이름을 포함한 함수 사용

패키지 내 함수들을 불러와 사용하는 경우, 가장 먼저 패키지 이름을 포함하여 가져오는

일반 import 구문을 생각해볼 수 있습니다.

 

사용 예시는 아래와 같으며, as를 활용한 별칭 import도 가능합니다.

import math
import numpy as np # 별칭 사용

이 경우, 패키지 내 함수는 패키지 이름.함수 이름의 형태로 사용하게 됩니다.

 

이해를 돕기 위하여 math와 넘파이 라이브러리 모두 가지고 있는 exp 함수를 살펴보면

math.exp는 리스트를 input으로 받을 수 없지만,

np.exp에서는 input으로 리스트 지정이 가능합니다.

 

패키지 자체를 import하는 경우 위와 같이 함수 이름이 중복된 경우 분리 사용이 용이합니다.

import math
import numpy as np

# 패키지 이름.함수 이름 형태로 사용
math.exp([1, 3, 5]) # TypeError: must be real number, not list
np.exp([1, 3, 5]) # array([  2.71828183,  20.08553692, 148.4131591 ])
반응형

from import : 함수 이름 직접 사용

from 패키지 import 함수 형태로 사용하는 문법에서는

패키지 이름.함수 이름 형태가 아니라 함수 이름 단독으로 바로 사용이 가능해집니다.

 

만일, 패키지 내 모든 함수를 위와 같은 형태로 가져오려면

from 패키지 import * 형태로 지정해주시면 됩니다.

from numpy import *

# 넘파이 라이브러리 내 함수를 이름만으로 바로 사용 가능
exp([1, 3, 5]) # array([  2.71828183,  20.08553692, 148.4131591 ])

이를 응용하여 패키지 내 하위 패키지가 있는 경우 여러 형태로 함수에 접근할 수 있습니다.

예를 들어, np.linalg.norm 함수는 아래와 같은 3가지 형태로 사용이 가능합니다.

import numpy as np
from numpy import linalg as LA
from numpy.linalg import norm

# 위의 3가지 import 형태 순서와 매칭되는 함수 사용 형태 순서
np.linalg.norm([1, 3, 5])
LA.norm([1, 3, 5])
norm([1, 3, 5])

 

 

import, from import 구분 이유 : 함수명 중복 방지

모든 함수를 전부 from import 형태로 가져오게 된다면 함수명 타이핑 용이 등

장점이 많을 것 같은데 왜 import 형태를 굳이 사용하는 것일까요?

 

그 이유는 바로 여러 패키지에서 함수명 중복 시 혼란을 방지하기 위해서 입니다.

위의 예시에서 다룬 math.exp 함수와 np.exp 함수를 다음과 같이 가져오면 문제가 발생합니다.

from numpy import *
from math import *

exp([1, 3, 5]) # 넘파이의 exp 함수를 의도했다면 혼란 발생

위의 경우 뒤 순서에 import한 math의 exp 함수가 넘파이의 exp 함수를 덮어쓰게 되면서

원래 의도와는 다른 결과가 반환될 수 있게 됩니다.

 

이런 경우 패키지 명을 포함한 import 형태를 사용하시거나,

꼭 필요한 함수만 from import로 따로 가져오는 방법을 사용하면 혼란을 막을 수 있습니다.