8

mycount()以下の例のように、ジェネレーター関数でリセットできるジェネレーター関数を定義しようとしますsend(0)send(0)まだ開始されていない新しいジェネレーター オブジェクトで使用する場合を除いて、すべて正常に動作します。この場合、それは を与えますTypeError。ジェネレーターが開始されたかどうかを確認する関数はありますか、またはそのような場合にTypeError新しいジェネレーター オブジェクトをキャッチして作成する必要がありますmycount(0)か?

def mycount(value):
    while True:
        v = yield value
        if v == None:
            value = value + 1
        else:
            value = v

g = mycount(3)
print(next(g))    # prints 3
print(next(g))    # prints 4
print(g.send(0))  # prints 0
print(next(g))    # prints 1
print(next(g))    # prints 2

g2 = mycount(3)
g2.send(0)
# TypeError: can't send non-None value to a just-started generator
4

4 に答える 4