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로 따로 가져오는 방법을 사용하면 혼란을 막을 수 있습니다.
'Python > 파이썬 기초' 카테고리의 다른 글
파이썬 filter 함수 사용 예제 정리(lambda, def, 문자열 예시) (2) | 2022.03.05 |
---|---|
파이썬 딕셔너리 value, key로 정렬, 내부 리스트 정렬 예제 (4) | 2022.02.23 |
파이썬 리스트 컴프리헨션(List Comprehension) 예제 총정리 (2) | 2022.02.13 |