본문 바로가기
728x90

CS33

[Python] with, match, else 블록 콘텍스트 관리자와 with 블록with 블록with문은 예외가 발생하더라도 자원을 안전하게 해제할 수 있도록 도와준다.with open("file.txt", "r") as f: data = f.read()with블록을 빠져나가면, f.close()가 자동으로 호출됨콘텍스트 관리자 (Context Manager)콘텍스트 관리자 객체는 with문을 제어하기 위해 존재하고, 다음 두 메서드를 가짐__enter__(self): with블록 시작 시 호출, as 키워드로 받은 변수에 반환값 저장__exit__(self, exc_type, exc_value, traceback): with블록 탈출 시 호출, 예외 발생 여부와 관계없이 무조건 실행exc_type: ZeroDivisionError 등의 예외 클래.. 2025. 5. 4.
[Python] 반복자, 제너레이터, 고전적인 코루틴 반복형(Iterable)과 반복자(Iterator)반복형(Iterable)정의: for 루프에서 사용할 수 있는 객체 (재사용 가능)조건: iter() 메서드를 가지고 있고(__getitem__()이어도 됨), 이 메서드가 반복자(iterator)를 반환해야 함예시: list, tuple, str, dict, set, range 등x = [1, 2, 3]iter_obj = x.__iter__() # or iter(x)반복자 (Iterator)정의: __next__() 메서드로 값을 하나씩 꺼낼 수 있는 객체조건: __iter__()와 __next__()를 모두 가지고 있어야 함동작: next() 함수로 값을 하나씩 꺼내며, 끝에 도달하면 StopIteration 예외 발생 (재사용 불가)x = iter.. 2025. 5. 3.
[Python] 데코레이터는 언제 실행되나요? - import 최근 데코레이터는 임포트 시점에 정의된다고 배웠다.def my_decorator(func): print("데코레이터 실행됨") # 이 코드를 모듈로 저장해놓고 다른 파일에서 import를 하면 say_hello()를 호출하지 않아도 my_decorator()는 실행되어서 "데코레이터 실행됨"이 먼저 출력된다.왜 데코레이터는 함수 정의 시점에 실행될까?1. 데코레이터는 그냥 함수를 다른 함수에 넣는 문법이다.파이썬에서는 아래 두 줄을 완전히 동등하게 취급한다.@my_decoratordef say_hi(): print("hi")def say_hi(): print("hi")say_hi = my_decorator(say_hi) 따라서 데코레이터는 함수를 인자로 받아서, 가공해서 다시 반환하는.. 2025. 4. 20.
[Python] 연산자 오버로딩 연산자 오버로딩 기본 지식연산자 오버로딩은 사용자 정의 객체가 중위 연산자(ex. +, |)나 단항 연산자(ex. -, ~)를 사용할 수 있게 해줌하지만 남용되기 쉬어 파이썬에서는 아래 제한을 두어 융통성, 사용성, 안전성을 유지함 내장형의 연산자는 오버로드 할 수 없다새로운 연산자를 만들 수 없으며, 기존 연산자를 오버로드할 수만 있다.is, and, or, not 연산자는 오버로드할 수 없다. (그러나 &, |, ~ 비트 연산자는 오버로드할 수 있다.)단항 연산자__neg__()가 구현하는 -__pos__()가 구현하는 +__invert__()가 구현하는 ~+ 연산자 오버로딩 __add__(self, other)벡터 덧셈을 정의 class Vector: def __init__(self, x,.. 2025. 4. 19.
[Python] 자료형 힌트 조금 더 알아보기 오버로드된 시그니처 (@overload)@typing.overload 데코레이터는 조합된 인수들에 대해 각각 따로 타입힌트를 줄 수 있게 해준다.@overload는 정적 타입 검사기(mypy 등)가 함수 호출 시 어떤 반환값이 나오는지 알게 해줌@overload로 선언된 함수는 구현 없이 시그니처만 제공, 본문 금지! (... 또는 pass)실제 구현은 하나, 모든 타입에 대한 조합을 직접 처리해야 함from typing import overload, Union@overloaddef add(x: int, y: int) -> int: ...@overloaddef add(x: str, y: str) -> str: ...def add(x: Union[int, str], y: Union[int, st.. 2025. 4. 19.
[Python] 상속: 득과 실 super() 함수유지보수가 용이한 객체지향 파이썬 프로그래밍을 위해서는 super() 내장 함수의 일관된 사용이 절대적으로 중요상속 관계에서 부모 클래스의 메서드를 호출할 때 사용class LastUpdatedOrderedDict(OrderedDict): def __setitem__(self, key, value): super().__setitem__(key, value) self.move_to_end(key)오버라이드된 __init__() 메서드를 호출하는 것은 슈퍼클래스가 인스턴스를 초기화하는 데 필요한 일을 할 수 있게 하므로 특히 중요하다.def __init__(self, a, b): super().__init__(a, b) ... # 추가 초기화 코드특.. 2025. 4. 19.
728x90