CodeGym /행동 /Python SELF KO /모듈 임포트

모듈 임포트

Python SELF KO
레벨 19 , 레슨 0
사용 가능

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은 특정한 순서로 이를 검색해:

  1. 현재 디렉토리: Python은 먼저 스크립트가 실행된 현재 디렉토리에서 모듈을 찾아.
  2. 환경 변수 PYTHONPATH: 현재 디렉토리에서 모듈을 찾지 못하면, Python은 PYTHONPATH 환경 변수에 지정된 디렉토리에서 모듈을 찾아.
  3. 표준 디렉토리: 모듈이 아직도 발견되지 않으면, 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가 반환돼.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION