파이썬(python) – import 와 from import 의 차이

여러분은 python 을 공부하시다가 from os import open 과 같은 구문을 보신 적이 있나요 ?
저는 처음 이를 봤을 때 그게 무슨 의미인지 궁금하더군요.

이는 해석하면 os 모듈에 있는 open 이란 함수를 import 하겠다는 의미입니다.
이런 구문을 왜 사용하냐하면 open 이란 함수가 여러 모듈에 동시에 존재할 수 있기 때문입니다. 여러 모듈을 import 한 상태에서는 어떤 모듈의 open 을 사용할 것인지 모호하겠죠 ?
그래서, os 라는 namespace 이름을 주고 앞으로 open 이라고만 이름을 사용하면 그게 곧 os 모듈의 것이라는 의미입니다.
그렇지 않다면 os.open() 과 같이 모듈까지 지정해서 사용해야 합니다.

다음의 테스트 결과와 주석을 유심히 보십시오.

# os 모듈의 getpid 를 getpid 라는 이름으로 import
>>> from os import getpid                         

# 현재 scope 에서는 os 라는 존재는 모르고
# os.getpid 를 가리키는 getpid 만 있으므로 에러

>>> os.getpid()
                                                        

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'os' is not defined

# getpid 밖에 모름
>>> getpid()                                          
2541

# os 의 getpid 만 import 했으므로 getpgid 는 모름.
>>> getpgid()                                         

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'getpgid' is not defined

# os 를 통째로 import 한 것이 아니므로 getpgid 모름
>>> os.getpgid(2541)                              

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'os' is not defined

# os 를 import 하니 getpgid 함수도 사용가능
>>> import os                                        
>>> os.getpgid(2541)

2541

from import 구문을 사용하면 해당 함수만 import 하여 모듈이름을 앞에 붙이지 않고도 사용할 수 있군요.
그렇다면 어차피 모듈이름도 없는거 alias 까지 지정할 수 있지 않을까요 ?
내가 지정하고 싶은 이름대로 사용할 수 있을 것 같은데 말이죠.

물론 가능합니다. ^^

# 끝에 as 와 alias name 을 붙인다.
>>> from os import getpid as mygetpid    

# 이제 원래 이름은 이해못함.
>>> getpid()                                           

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'getpid' is not defined

# alias name 으로만 사용가능
>>> mygetpid()                              

2552

You may also like...

0 0 vote
Article Rating
Subscribe
Notify of
guest
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
중고새내

두개 차이가 궁금했는데 속 시원하게 해결되었습니다!!! 소스 제일 처음부터 왜 이럴까…? 답답했는데 드디어 넘어가네요ㅠㅠ

1
0
Would love your thoughts, please comment.x
()
x