inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

안녕하세요 파이썬문법 클래스, 제너레이터에 대해 질문드립니다!

244

Han Kim

작성한 질문수 23

0

RESETS = [
    False, False, False, True, False, True, False,
    False, False, False, False, False, False, False]

def check_for_reset():
    # 외부 이벤트를 폴링한다
    return RESETS.pop(0)

def announce(remaining):
    print(f'{remaining} 틱 남음')


class Timer:
    def __init__(self, period):
        self.current = period
        self.period = period

    def reset(self):
        self.current = self.period

    def __iter__(self):
        while self.current:
            self.current -= 1
            yield self.current

#
def run():
    timer = Timer(4)
    for current in timer:
        if check_for_reset():
            timer.reset()
        announce(current)

run()

 

결과 :

 

 

안녕하세요!! 파이썬 class 및 제너레이터에 대해 질문드립니다!!

 

위 코드를 보면 timer라는 인스턴스가 루프를 돌면서 announce를 호출 하는 코드인데

이해가 안되는 점이 왜 RESETS 리스트의 데이터가 pop이 되는 걸까요???

for문이 돌고는 있지만 실질적으로 check_for_reset 함수는 호출되고 있지 않자나요??

근데 결과를 보면 for문 돌면서 계속 RESETS 리스트의 데이터가 pop되고 있는 게 신기하네요

 

class iter메소드가 아닌 그냥 for문 돌리면 그냥 일반적인 예상대로 RESTS리스트의 데이터는 그대로 존재하는데 말이죵;;

Timer라는 클래스랑 RESETS 리스트랑 코드상 직접적인 관계가 없는데 같이 맞물려 동작하는게 이해가 안되네요 ;;;

 

어떠한 원리에 의해서 위와 같이 동작하는걸까요!!??

 

 

 



 

python docker django react

답변 1

0

이진석

안녕하세요.

아래 코드에서 for 반복 시마다 check_for_reset() 함수를 호출하고 계시니, 말씀하시는 대로 동작하는 것이 맞습니다.

image

Timer를 iterator 객체로서 구현하셨고, 구현하신 대로 동작하고 있습니다. 아래와 같이 for 순회 시에 timer 객체를 list(timer)로 감싸시면, 동작이 달라질 것입니다.

image

Iterator/Generator에 대해서 차근차근 정리해보세요.

화이팅입니다. :-)

안녕하세요.

0

51

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

275

1

useEffect 훅에서 else 유무에 따른 결과

0

211

1

useAxios 훅의 dependency array 설정

0

245

1

useEffect에서 변수 업데이트 관련 질문

0

382

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

268

1

bootstrap4

0

471

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

365

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

574

3

useState는 필수일까요?

0

263

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

600

4

Django allauth를 사용한 소셜 로그인 시 에러

0

655

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

556

2

useLocalStorage() 함수 사용여부

0

229

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

449

1

리듀서의 의미 재확인

0

430

1

simple-jwt Refresh Token 사용 노하우

0

899

2

docker compose 를 통한 배포 관련 오류 문의

0

673

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

365

1

is_like_user

0

233

1

related_name 오류

0

275

1

re_path 오류

0

259

1

re_path url

0

251

1

No post matches the given query

0

661

2