pythonでgenerator/send関数をもう少し理解しようとしています。私はリンクでいくつかを読んだ:generator send function purpose多くを助けた。Python generatorコルーチン
しかし、以下のコードを理解しようとしています。 next(checker)
はなぜ必要なのですか?送信機能がジェネレータの次の項目を自動的に要求しないのですか?私はちょうどそのループの前にnext(checker)
を持ってみましたが、それは同じように機能しません。私はsend関数がxとして '試み'を送信し、のいずれかを返すと考えました。私はちょうどループの中で次の(チェッカー)を持つ必要がある理由を理解していない。上記
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ベースを返します。最初正しい試行のインデックス、または-1どれも存在しない場合。
例
attempts = ["hello", "world", "I", "like", "coding"]
と password = "like"
ため、出力は のcheckpassword(Aなければなりませんttempts、password)= 4. "
私はまだ完全に理解していません。 x = yieldだけでは何も得られない? send関数が呼び出されたときにx = yieldが実行され、xに試行を渡してからtrueまたはfalseを返すと思ったのですか? – user1179317
@ user1179317:あなたが 'send'を呼び出すと' x = '部分が実行されます。 'next'を呼び出すと、ジェネレータは' yield'に進み、 'None'を返し、一時停止します。 'send'を呼び出すと、あなたが送ったオブジェクトは' yield'式の値になり、 'x'に代入され、' send'の戻り値は次の 'yield'から来ます。 – user2357112
さて、私はそれを得たと思う。ありがとう – user1179317