26.8.14 / Fri

BaO·2026년 8월 14일

TIL

목록 보기
4/33

5-4 이터레이터 & 제너레이터

1. 이터러블 (Iterable)

  • 반복 가능한 객체
  • __iter__(..) 가 정의되어 있어야 반복 가능
  • __next__(..) 인덱스를 한칸식 이동하면서 요소를 꺼내오는 기능
  • 이터레이터(반복자)

2. 이터레이터 (Iterator)

반복하기 위해서는

  • 이터레이터 객체 생성( __iter__ 호출(iter(...) )
  • 순서를 한칸씩 이동하면서 요소 조회( __next__ 호출(next(...) )
fruits = ['apple', 'orange', 'melon', 'banana']

it = iter(fruits) # __iter__(..) 호출
print(next(it)) # 'apple', 'orange' ... 순서대로 출력됨

3. 제너레이터(Generator)

  • 함수의 실행을 정지하고 원할 때 다시 재개하는 형태
  1. 함수 안에서 yield를 만나면 yield의 값을 내보내고, 진행중이던 함수를 일시 정지한다
  2. next(..)으로 호출하면 함수의 실행을 재개하여 다음 yeild를 출력하고 다시 정지를 반복한다.
def generate_nums():

    print('1번째')
    yield 10

    print('2번째')
    yield 20

    print('3번째')
    yield 30
gen = generate_nums()

print(next(gen))
# 꺼내올때 마다 힙 영역에 값을 할당하기 때문에 메모리 관리에서 장점이 있다.

nums = [10, 20, 30] # 처음부터 힙 영역에 10, 20, 30 할당한다.

4. 제너레이터 표현식

  • 참고 : 리스트 컴프리헨션 -> 생성 결과가 처음부터 메모리에 적재되어 있음
  • 리스트 대신 튜플로 리스트 컴프리헨션과 동일하게 사용 -> 메모리 소비가 적음
  • 대용량 데이터 처리
gen = (i for i in range(1, 101) if i % 2 == 0)

print(gen) # <generator object <genexpr> at 0x10ab4a670>

5. 동기 & 비동기

  • 동기 : 순서대로 실행하고 결과도 순서대로 도출
    • A 종료 되어야 B 실행, B 종료 되어야 C 실행
  • 비동기 : 순서대로 실행하지만 결과는 먼저 종료된 순서대로 도출

6-1 모듈 & 패키지

1. 독립 소스 파일 모듈

  • 모듈 - 파이썬 파일 하나
  • 다른 파일에서 모듈을 불러와서 사용하는 경우가 많다.
  • __name__ : 모듈 이름
    • import한 경우에 name이 import한 모듈명으로 변경
    • 터미널에서 python을 실행하면 __main__으로 실행
    • if __name__ == '__main__' : 의 내부 내용은 터미널에서 자체 실행했을때만 적용한다.

2. 디렉터리형 패키지(Package)

  • 패키지는 모듈을 모아놓은 디렉터리
  • from 패키지명.하위패키지 import
  • 전체 패키지 경로
    • 절대 경로 접근 : chapter06.mod3
    • 상대 경로 접근 : .., .

3. import, from, as

  • import : 모듈 불러오기
  • from 모듈명/패키지명 import 모듈의 함수/변수/클래스 등 , 모듈(패키지)
  • from ... import * : 해당 모듈의 모든 함수,변수,클래스를 불러옴
  • from ... import ... as ... : as를 이용해서 모듈명을 원하는 이름으로 변경하여 사용 가능
# mod1.py
def add(num1, num2) :
    return num1 + num2

def minus(num1, num2):
    return num1 - num2

VERSION = '1.0.0'
# 모듈 불러오기
import mod1

mod1.add(10, 20) # 30
mod1.VERSION # '1.0.0'
from mod1 import add, minus, VERSION
# from 사용하면 함수, 변수명 앞에 모듈명을 작성하지 않아도 사용 가능.

print(add(1, 2))
print(minus(20, 10))
print(VERSION)
# 모듈의 함수, 변수 전체 불러오기
from mod1 import *

print(add(1, 2))
print(minus(20, 10))
print(VERSION)
# 패키지의 모듈 불러오기
from utils import mod2
from utils.sub.mod3 import divide

mod2.multiply(10, 20)
divide(20, 4)

__init__.py

  • 현재 디렉토리가 패키지임을 알려주는 파일.
  • 하위 모듈, 패키지에서 공통적으로 처리해야하는 코드를 작성하여 모듈 불러올때 최초 한번만 실행한다.
  • 패키지내에서 사용할 공통적인 함수,변수,클래스를 정의
  • from 패키지 import ... 를 사용할 때에는 패키지 경로를 잘 적도록 하자.
  • from 패키지 import * : __all__ = [....] : 에 정의된 모듈만 import

4. 파이썬 표준 라이브러리

  • 파이썬이 가지고 있는 내장 모듈

0개의 댓글