About Python – “모듈(1) – import, from”

About Python – “모듈(1) – import, from”

1월 17, 2022

파이썬의 모듈 (Module)

이런 것을 지원하기 위해, 파이썬은 정의들을 파일에 넣고 스크립트나 인터프리터의 대화형 모드에서 사용할 수 있는 방법을 제공합니다. 그런 파일을 모듈 이라고 부릅니다; 모듈로부터 정의들이 다른 모듈이나 메인 모듈로 임포트 될 수 있습니다 (메인 모듈은 최상위 수준에서 실행되는 스크립트나 계산기 모드에서 액세스하는 변수들의 컬렉션입니다).

모듈은 파이썬 정의와 문장들을 담고 있는 파일입니다. 파일의 이름은 모듈 이름에 확장자 .py 를 붙입니다. 모듈 내에서, 모듈의 이름은 전역 변수 __name__ 으로 제공됩니다.

파이썬 공식 문서

다음의 파이썬 코드를 vars.py라는 이름으로 만들어 봅시다.

myName = "Goddessana_"
yourName = "Users"

def printName():
    print("저의 이름은, %s." % myName)
    print("당신의 이름은, %s." % yourName)

또, 새로운 파이썬 파일을 a.py 라는 이름으로 만들어 보겠습니다. 내용은 위에서 만들어둔 vars.pyprintName() 함수를 호출하는 코드 한 줄만 써넣어 보겠습니다. 같은 디렉토리에 만듭니다.

당연하게도 a.py 파일을 실행시켜 보면 NameError: name 'printName' is not defined 에러, 즉 함수가 정의되지 않았다는 오류가 발생합니다. 위의 경우처럼 본인이, 혹은 다른 사람들이 만들어 놓은 파이썬 파일들을 사용해야 하는 경우가 생깁니다. 그럴 때에 사용하는 것이 바로 모듈입니다.

이와 비슷한 경우로, C에서 printf() 함수를 사용하기 위해서는 함수가 정의된 헤더 파일인 #include <stdio.h> 라는 코드를 맨 윗부분에 적어주어야 했습니다. 마찬가지로, 위의 경우에서도 printName() 함수를 사용하려면 printName()이 정의된 파일인 vars.py를 파일에 포함해주어야 합니다. 사용법은 아래와 같습니다.

import 모듈명

그러면, 바로 적용해보겠습니다. a.py라는 파일을 수정합니다.

import vars
vars.printName()

위의 코드는 아주 잘 동작하는 것을 확인할 수 있습니다. vars.py에 있는 함수를 사용하기 위해서는, 모듈명. 을 사용해주면 됩니다.

실제로 vars.printName() 와 같은 코드는 아래의 코드와 비슷합니다.

str = "Hello!"
print(str.upper())

객체 str 의 함수 upper() 을 사용하는 방식과 유사합니다. 아래의 흐름을 읽어 봅시다.

  1. strstr 클래스입니다. (<class 'str'>)
  2. 클래스에 있는 속성( – 변수 등)이나 메서드를 attribute라고 부릅니다.
  3. 점(.) 을 찍으면, 해당 객체가 가지고 있는 attribute 를 참조한다는 것인데, str.upper() 은 str 객체가 가지고 있는 upper() 라는 이름의 attribute를 참조하겠다는 의미입니다.
  4. 파이썬의 dir() 함수는 () 안에 있는 것의 attribute를 반환하는 함수입니다.
  5. 실제로, dir(str)을 하면 str 객체가 가지고 있는 attribute 리스트를 반환하는 것을 확인할 수 있지요.
  6. 그러면, dir(모듈 객체) 를 하면 어떻게 될까요?
import vars
print(dir(vars))
# ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__',
# '__package__', '__spec__', 'myName', 'printName', 'yourName']

실제로 'myName', 'printName', 'yourName' 처럼 우리가 만들었던 vars.py 파일의 attribute들이 출력되는 것을 확인할 수 있습니다.

파이썬의 from 키워드

그런데, 위의 vars.printName() 코드처럼 사용하지 않고 printName() 으로 함수를 바로 사용하고 싶으면, 다음과 같이 하면 됩니다.

# from 모듈명 import 모듈함수
from vars import * # * 의 의미는 "모든 것" - vars 모듈의 모든 함수를 사용하겠다는 것입니다.
# from vars import printName 의 의미는 vars 모듈의 printName 함수를 사용하겠다는 것입니다.
printName()

실제로, 위의 코드는 잘 동작하는 것을 확인할 수 있을 것입니다.

Leave A Comment

Avada Programmer

Hello! We are a group of skilled developers and programmers.

Hello! We are a group of skilled developers and programmers.

We have experience in working with different platforms, systems, and devices to create products that are compatible and accessible.