for
루프에서 반복 가능, 내부적으로는 __iter__()
메서드를 통해 이터레이터를 반환__iter__()
와 __next__()
메서드를 구현해야 함__next__()
메서드를 호출할 때마다 다음 요소를 반환StopIteration
예외를 발생시켜 순회를 종료class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
item = self.data[self.index]
self.index += 1
return item
else:
raise StopIteration
# 이터레이터 사용
my_iter = MyIterator([1, 2, 3])
for item in my_iter:
print(item)
yield
키워드를 사용해 값을 순차적으로 반환yield
는 반환 후 함수의 상태를 저장하고, 이후 호출 시 다시 이어서 실행def my_gen():
yield 1
yield 2
yield 3
# 제너레이터 사용
gen = my_gen()
for value in gen:
print(value)
()
를 사용하여 제너레이터 생성 가능gen_exp = (x * x for x in range(5))
for num in gen_exp:
print(num)
@
기호를 함수나 메서드 앞에 붙여 사용def deco_func(original_func):
def wrapper(*args, **kwargs):
# 추가할 기능
print("before decoration")
original_func(*args, **kwargs)
print("after decoration")
return wrapper
@deco_func # display에 데코레이터 적용
def display():
print("execute original function")
display()
# before decoration
# execute original function
# after decoration
@decoration1 # 나중에 적용
@decoration2 # 먼저 적용
def func():
pass
1) 모델(Model)
- 데이터베이스 구조를 정의하고, 데이터와 상호작용하는 역할
2) 뷰(View)
- 사용자가 보는 화면을 담당. 모델에서 가져온 데이터를 사용해 템플릿에 전달
3) 템플릿(Template)
- HTML을 생성하는 역할. 뷰에서 전달받은 데이터를 표시
4) URL 컨피그(URLconf)
- URL과 뷰를 연결하는 역할. 사용자가 특정 URL로 접근할 때 어떤 뷰를 호출할 지 결정
1) URL 요청
- 사용자가 웹 브라우저에서 특정 URL을 요청
2) 뷰 호출
- Django의 URLconf가 해당 URL에 매핑된 뷰를 호출
3) 데이터 처리 및 템플릿 렌더링
- 뷰는 필요한 데이터를 모델에서 가져오고, 템플릿에 전달하여 HTML을 생성
4) HTML 응답
- 생성된 HTML을 웹 브라우저에 반환하여 사용자에게 표시