フアン・ガルシア:
作るとき、なぜこんにちはみんなはので、私は思っていた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
ではないとif
。if
条件に応じて実行されます行のみ判定する。
実際には発電機は、関数の一般化です。何度でも発電戻りながら機能は、一度値を返す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!