0

1週間前にPythonのジェネレーターについて学びました。私が理解したところによると、「yield」は、たとえば配列全体をそのままではなく、ジェネレータオブジェクトを返します。

整数の桁を取得するために私が書いたコードは次のとおりです。

def getDigits(m):
    for d in str(m):
        yield int(m)

これにより、ジェネレータオブジェクトとして渡された整数の桁が返されます。しかし、私がそうするとき:

for i in getDigits(123):
    print i

次のように出力を取得します。

123
123
123

それ以外の:

1
2
3

何が起こっている?私は何か間違ったことをしていますか?

4

5 に答える 5

6

yield int(d)の代わりになりますyield int(m)

def getDigits(m):
    for d in str(m):
        yield int(d)
于 2012-06-24T16:37:09.687 に答える
3

私はあなたが意味したと思います

def getDigits(m):
    for d in str(m):
        yield int(d)

つまり、ループ内の数字を出力します。

于 2012-06-24T16:37:28.143 に答える
3

打ち間違え:

def getDigits(m):
    for d in str(m):
        yield int(d)

dの代わりにm

于 2012-06-24T16:37:33.783 に答える
3

代わりにこれを試してください:

yield int(d)

あなたはそれを繰り返していますが、数字自体を使用していません。

于 2012-06-24T16:38:03.860 に答える
0

より単純な形式は次のとおりです。

getDigits = lammbda m: map(int, str(m))
于 2017-06-18T08:05:58.557 に答える