1

ジェネレーターについて、期待した出力が得られないという誤解は何ですか? . send() したデータを出力する単純な関数を作成しようとしています。情報が送信されない場合は「なし」を返します。

import pudb
#pudb.set_trace()
def gen():
        i = 0
        while True:
                val = (yield i)
                i = val
                if val is not None:
                        yield val
                else:
                        yield 'none'

test = gen()
next(test)
print test.send('this')
print test.send('that')
print test.next()
print test.send('now')

期待される出力:

'this'
'that'
'none'
'now'

実際の出力:

'this'
'this'
'none'
'none'
4

1 に答える 1

0

各値を 2 回生成します。ここに来たら:

val = (yield i)

そして一度ここに:

yield val

次のように、各値を一度だけ生成し、ユーザーの入力をキャプチャする必要があります。

def parrot():
    val = None
    while True:
        val = yield val

'none'ユーザーが を呼び出したときに実際のNoneオブジェクトではなく文字列を本当に生成したい場合はnext、それを行うことができますが、それは悪い考えかもしれません:

def parrot():
    val = None
    while True:
        val = yield ('none' if val is None else val)
于 2013-08-04T04:36:03.427 に答える