1.1 모듈 개요
Python에서 모듈은 .py 확장자를 갖는 파일로 구성되어 있어. 모듈은 큰 코드 덩어리를 작고 관리하기 쉬운 조각으로 나누게 해줘. 각 모듈은 함수, 클래스, 변수를 포함할 수 있고, 임포트될 때 실행되는 코드도 포함할 수 있어.
간단한 모듈 예제
모듈 mymodule.py를 만들어보자:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
이제 이 모듈을 다른 파일에서 임포트해서 사용할 수 있어.
1.2 모듈 임포트
Python에서는 모듈을 임포트하는 여러 가지 방법을 제공해. 하나씩 살펴보자.
전체 모듈 임포트
이 작업의 일반적인 문법은 다음과 같아:
import 모듈
이 방법은 전체 모듈을 임포트해, 모듈 이름을 사용하여 함수와 변수를 사용할 수 있어.
import 모듈
print(모듈.greet("Alice")) # 출력: Hello, Alice!
print(모듈.pi) # 출력: 3.14159
이전에 math 모듈로 이를 했던 걸 기억하니?
import math
print(math.ceil(13 / 7)) # 올림
print(math.floor(13 / 7)) # 내림
모듈에서 특정 요소 임포트
모듈의 모든 것을 임포트하지 않고, 특정 요소만 임포트할 수도 있어. 일반적인 문법은 다음과 같아:
from 모듈 import func, var
이 방법은 모듈의 특정 함수, 클래스 또는 변수를 임포트하여 모듈 이름 없이 사용할 수 있게 해줘.
from mymodule import greet, pi
print(greet("Bob")) # 출력: Hello, Bob!
print(pi) # 출력: 3.14159
별칭을 사용하는 모듈 임포트
이 작업의 일반적인 문법은 다음과 같아:
import 모듈 as 별칭
이 방법은 모듈을 임포트하고 다른 이름을 지정할 수 있게 해줘, 긴 모듈 이름을 줄이거나 이름 충돌을 해결하는데 유용해.
import mymodule as mm
print(mm.greet("Charlie")) # 출력: Hello, Charlie!
print(mm.pi) # 출력: 3.14159
모듈의 모든 요소 임포트
이 작업의 일반적인 문법은 다음과 같아:
from 모듈 import *
이 방법은 모듈의 모든 함수, 클래스 및 변수를 임포트하여 모듈 이름 없이 사용할 수 있게 해줘. 하지만 이 방법은 이름 충돌을 일으킬 수 있고, 코드 읽기를 어렵게 만들 수 있기 때문에 권장되지 않아.
from mymodule import *
print(greet("Dave")) # 출력: Hello, Dave!
print(pi) # 출력: 3.14159
1.3 임포트 과정의 내부
모듈 검색 순서
모듈을 임포트할 때, Python은 특정한 순서로 이를 검색해:
- 현재 디렉토리: Python은 먼저 스크립트가 실행된 현재 디렉토리에서 모듈을 찾아.
- 환경 변수
PYTHONPATH: 현재 디렉토리에서 모듈을 찾지 못하면, Python은PYTHONPATH환경 변수에 지정된 디렉토리에서 모듈을 찾아. - 표준 디렉토리: 모듈이 아직도 발견되지 않으면, Python은
sys.path에 지정된 표준 디렉토리에서 모듈을 찾아.
예시:
import sys
for path in sys.path:
print(path)
로컬 및 글로벌 임포트
모듈 임포트는 글로벌 수준(파일의 시작 부분)이나 로컬 수준(함수 또는 메소드 내)에서 수행할 수 있어.
글로벌 임포트
글로벌 임포트는 파일의 시작 부분에 수행되어, 파일 전역에서 사용할 수 있게 해줘.
import math
def calculate_circle_area(radius):
return math.pi * radius ** 2
로컬 임포트
로컬 임포트는 함수나 메소드 내에서 수행되며, 해당 함수나 메소드에서만 사용할 수 있게 해줘.
def calculate_square_root(x):
import math
return math.sqrt(x)
print(calculate_square_root(16))
로컬 임포트는 모듈 로딩 시간을 줄이거나 이름 충돌을 방지하는 데 유용해.
1.4 동적 임포트
동적 임포트는 프로그램 실행 중에 모듈을 임포트할 수 있게 해줘. 이는 사용자 입력이나 다른 동적 조건에 따라 모듈을 임포트해야 할 때 유용해.
이 작업의 일반적인 문법은 다음과 같아:
module = __import__("모듈")
예제로 math 모듈을 이 방법으로 임포트해보자.
module_name = "math"
module = __import__(module_name)
print(module.sqrt(16)) # 출력: 4.0
그 이후의 코드는 import as를 사용하는 것과 비슷하게, 모듈 math에 별칭 module을 지정하는 것처럼 다룰 수 있어.
1.5 getattr 함수를 사용하여 모듈 속성에 접근하기
getattr 함수는 모듈(또는 어떤 객체)에서 속성을 동적으로 가져올 수 있게 해줘. 이는 속성 이름이 미리 알려지지 않거나 프로그램 실행 중에 변경될 수 있는 경우에 유용해.
getattr 함수의 문법:
getattr(object, name, default = None)
여기서 object는 속성을 가져올 객체, name은 속성 이름을 포함하는 문자열, default는 지정된 이름의 속성이 존재하지 않을 때 반환되는 값이야. default 매개변수의 기본값은 None이야.
getattr 함수의 사용 예:
import math
# math 모듈에서 sqrt 속성을 가져오기
sqrt_function = getattr(math, 'sqrt')
print(sqrt_function(25)) # 출력: 5.0
# 존재하지 않는 속성을 가져오려고 시도, 기본값 반환
non_existent_attr = getattr(math, 'non_existent', 'default_value')
print(non_existent_attr) # 출력: default_value
이 예에서 우리는 getattr 함수를 사용하여 math 모듈에서 sqrt 함수를 가져오고, 숫자 25의 제곱근을 계산하기 위해 이 함수를 호출해. 지정된 이름의 속성이 존재하지 않을 경우, 기본값 default_value가 반환돼.
GO TO FULL VERSION