파이썬에서 generator/send 함수를 좀 더 이해하려고합니다. 나는 많은 것을 도왔던 링크 : generator send function purpose를 읽었다.파이썬 생성기 코 루틴
하지만 아래 코드를 이해하려고합니다. next(checker)
은 왜 필요한가요? 보내기 기능이 자동으로 발전기의 다음 항목을 요구하지 않습니까? 나는 단지 for 루프 앞에 next(checker)
을 가지려고했으나 같은 방법으로는 기능을하지 못한다. 나는 send 함수가 x로 '시도'를 보내고 x == password
의 결과를 산출한다고 생각했다. 나는 그저 왜 루프에 다음 (체커)이 있어야하는지 이해하지 못한다.
def checkPassword(attempts, password):
def check():
while True:
x = yield
yield x == password
checker = check()
for i, attempt in enumerate(attempts):
next(checker)
if checker.send(attempt):
return i + 1
return -1
기능은 위의 문제의 기본은 다음과 같습니다.
는"로컬 테스트하려는 기능을 확인하기 위해 시도의 목록과 올바른 암호를 감안할 때, 1 기 반환 첫 번째 시도의 정확한 인덱스 또는 attempts = ["hello", "world", "I", "like", "coding"]
및 password = "like"
-1 없음이 없다면.
예
가 출력되어야 checkpassword를 (a ttempts, password) = 4 "
나는 아직도 완전히 이해하지 못한다. x = yield는 단지 yield만을 산출합니까? send 함수가 호출 될 때 x = yield가 실행 된 것으로 생각하고 x에 시도를 전달한 다음 true 또는 false를 반환합니다. – user1179317
@ user1179317 :'x ='부분은'send'를 호출 할 때 실행됩니다. 'next'를 호출하면 생성기는'yield'로 진행하고'None'을 반환하고 일시 정지합니다. 'send'를 호출하면 여러분이 보낸 객체는'yield' 표현식의 값이되고'x'에 할당되고'send'의 반환 값은 다음'yield'에서옵니다. – user2357112
좋아, 알았어. 감사합니다 – user1179317