파이썬 고급 문법 정리 — 예외 처리, 제너레이터, 데코레이터까지,__call__ 메서드, 가변인자 덧셈
2025. 8. 12. 17:25ㆍ심화_인공지능 YOLO기반 부트캠프_일기(CNN)
그동안 정보처리기사 필기시험 준비와 프로젝트 등으로 바쁜 시간을 보내느라 블로그 글을 쓰지 못했지만, 이제 다시 시작하려 합니다. 시간이 나면, 한이 맺힌 정보처리기사 필기시험 후기도 꼭 작성해 보겠습니다.
1. 예외 처리 후 재입력 받기
while True:
try:
num = int(input("숫자를 입력하세요: "))
answer = 10 / num
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except ValueError:
print("숫자를 입력해야 합니다.")
else:
print(f"{10} / {num} = {answer}")
break
print("프로그램 종료")
- ValueError → 문자를 입력했을 때
- ZeroDivisionError → 0을 입력했을 때
- 그 외 → 정상 계산 후 출력하고 반복 종료
2. 제너레이터 기본 예제
제너레이터란?
제너레이터(Generator)는 한 번에 하나씩 값을 생성하는 함수입니다.
yield 키워드를 사용해 값을 반환하며, 호출될 때마다 이전에 멈춘 지점부터 이어서 실행됩니다.
아래 코드를 보시죠!
동작 방식 예시
def line_reader(filepath):
with open(filepath, "r", encoding="utf-8") as f:
for line in f:
yield line.strip()
for line in line_reader("employee.csv"):
print(line)
- for line in f: → 파일을 한 줄씩 읽음
- yield line.strip() → 읽은 줄을 반환하고 함수 실행을 잠시 멈춤
- 다음 값 요청 시, 멈췄던 다음 줄부터 실행 (print() 출력 후 다음 줄 읽기)
장점
- 메모리 효율성: 한 번에 한 줄씩 읽기 때문에 대용량 파일도 부담 없이 처리 가능
- 지연 실행(Lazy Evaluation): 필요한 순간에만 값을 생성
3. 데코레이터로 실행 시간 측정
데코레이터와 func(*args, **kwargs) 이해하기
데코레이터는 원래 함수를 감싸서 기능을 확장하는 함수입니다.
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print("실행 시간:", time.time() - start)
return result
return wrapper
@timer
def slow_function():
time.sleep(1)
return "완료!"
slow_function()
- @timer는 slow_function을 timer(slow_function)으로 바꿉니다.
- timer 함수는 wrapper라는 내부 함수를 반환합니다.
- 그래서 이제 slow_function()을 호출하면 실제로는 wrapper()가 실행됩니다.
중요한 부분은 wrapper 안의
result = func(*args, **kwargs)
코드입니다. 여기서 func는 데코레이터가 감싸는 원래 함수(slow_function)이고,
*args, **kwargs는 함수에 전달된 모든 인자를 의미합니다.
4. __call__ 메서드 활용
파이썬 클래스에 __call__ 메서드를 정의하면, 인스턴스를 마치 함수처럼 호출할 수 있습니다.
class Addition:
def __init__(self, num1, num2):
self.num1 = num1
self.num2 = num2
def __call__(self):
result = f"{self.num1} + {self.num2} = {self.num1 + self.num2}"
print(result)
add = Addition(3, 5)
add()
이렇게 하면 add()처럼 괄호를 붙여서 호출할 수 있어, 코드가 더 직관적이고 깔끔해집니다.
5. 가변 인자 덧셈
*args는 함수에 전달되는 위치 인자의 개수가 정해져 있지 않을 때 사용하는 문법입니다.
def add(*args):
print('합산결과 =', sum(args))
add(1, 2, 3, 4)
- *args는 여러 개의 인자를 튜플 형태로 받습니다.
- sum() 함수로 모든 인자의 합을 쉽게 계산할 수 있어 편리합니다.
'심화_인공지능 YOLO기반 부트캠프_일기(CNN)' 카테고리의 다른 글
| 딥러닝 초보를 위한 PyTorch 모델 학습 기록 (14) | 2025.08.14 |
|---|---|
| Pandas : 데이터프레임 기초부터 병합·결측치 처리·시각화까지 (12) | 2025.08.13 |
| Python 클래스 기초 (2) (6) | 2025.07.30 |
| Python 클래스 기초 (1) (4) | 2025.07.30 |
| YOLO 소개와 Python 개발환경 준비 (4) | 2025.07.30 |