python
01. iter
인계동ADHD환자
2022. 7. 11. 00:01
728x90
파이썬에서 튜플, 문자열, 리스트의 특정 요소를 가져오라 하면 for문을 돌며 수작업으로 요소를 선택하지 않고
[] 자체 시퀀스로 가져올 수 있다
items[:-3] -> 뒤에서 부터 3개 요소 제외하고 나머지
items[3:] -> 3번째 있는 요소부터 나머지
시퀀스 기능은 __getitem__ 이라는 매직 메서드 덕분에 작동한다
with문으로 파일을 열게되면 __enter__와 __exit__ 두 개의 매직 메서드로 구성된다.
contextlib.suppress 와 try except의 차이점
util패키지로 제공한 예외 중 하나가 발생한 경우 실패하지 않도록 한다.
try는 try안에서 오류가 났을 경우 except로 예외 처리하는 경우를 말한다
파이썬에서의 밑줄
public, private, protected 프로퍼티를 가지는 언어들과 다르게 파이썬은 객체의 모든 프로퍼티와 함수는 퍼블릭이다.
그래서 _을 사용함으로 private라고 약속하느 것이다.(하지만 퍼블릭으로 작동함)
밑줄 두개 __를 쓰면 private로 정의해준다(진짜로 외부로 호출이 안됨)
@property -> 응답 쿼리를 위한 데코레이터
@<property_name>.setter -> 무언갈 하기 위한 데코레이터
하나의 메서드에서는 한 가지 이상의 일을 하지 말아야 한다.
무언가는 할당하고 유효성 검사를 하고 싶으면 두 개 이상의 문장으로 나누어야 한다.
이터러블 객체
리스트, 튜플, 셋, 딕셔너리는 원하는 데이터를 보유할 수 있을 뿐 아니라 for문을 통해 값을 반복적으로 가져올 수 있다.
반복을 위해 정의한 로직을 사용하여 자체 이터러블을 만들어 보자.
from datetime import timedelta
class DateRangeIterable:
def __init__(self, start_date, end_date):
self.start_date = start_date
self.end_date = end_date
self._present_day = start_date
def __iter__(self):
return self
def __next__(self):
if self._present_day >= self.end_date:
raise StopIteration
today = self._present_day
self._present_day += timedelta(days=1)
return today
파이썬은 iter()함수를 호출하고 이 함수는 __iter__매직 메서드를 호출한다.
__iter__은 self를 반환하고 있으므로 객체 자신이 이터러블임을 나타내고 있다.
루프는 각 단계에서 자신의 next()함수를 호출한다. next는 __next__메서드에게 위임한다.
더 이상 생성한 next가 업ㅎ을 경우 예외를 발생시켜 종료한다.
파이썬 내장 함수 iter()과 next()인듯?
리스트, 튜블 등 반복이 가능한 형태를 iter과 next를 파이썬안에서 알아서 사용하여 [:3]형태로 요소를 추출할 수 있음
728x90