収量と予想外の結果によるループの混乱ながら、

フアン・ガルシア:

作るとき、なぜこんにちはみんなはので、私は思っていたmake_song() それは実際に働いていた機能を、私は以下を示しつもりバージョンはそれがなかったように動作しないだろうと思いました

def make_song(count = 99, beverage = "soda"):
    while count > 0:
            if count > 1:
                yield "{} bottles of {} on the wall.".format(count, beverage)
                count -=1
            elif count == 1:
                yield "Only {} bottle of {} left!".format(count, beverage)
                count -= 1
                yield "No more {}!".format(beverage)

hey = make_song(5, "coke")
print(next(hey))
print(next(hey))
print(next(hey))
print(next(hey))
print(next(hey))
print(next(hey))

私の結論はときということでした== 1をカウントし、それを印刷します:

コークスの唯一の1瓶は残っています!

もっとコークスはありません!

彼らは同じ下の両方であったためかの声明。驚いたことに、それは私が仕事にだけ印刷して、それを望んでいた道働い「左コークスの唯一の1瓶を!」とき、カウント== 1、その後、私は再びそれが「これ以上のコークスを!」印刷しないだろう)(次に使用するとき、私は仕事にこれを期待していませんでした、

if文は、同じ下にあったにもかかわらず== 1を数えるときなぜそれが両方の収量を印刷しないのですか?

norok2:

ときを決定するコードの一部ジェネレータが できますあなたに何かがあるyieldではないとifif条件に応じて実行されます行のみ判定する。

実際には発電機は、関数の一般化です。何度でも発電戻りながら機能は、一度値を返すyield文が到達しています。各後yield実行は中断され、そして次の呼び出し時にnext()実行を再開し、次のまで継続されるyield発見されました。

代替next()呼び出しが直接イテレータを使用することですforすべての可能な排気れる、ループyieldエンドポイントを。

例えば:

for s in make_song(5, "coke"):
    print(s)

あなたを与えるだろう。

5 bottles of coke on the wall.
4 bottles of coke on the wall.
3 bottles of coke on the wall.
2 bottles of coke on the wall.
Only 1 bottle of coke left!
No more coke!

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=391595&siteId=1