1. ホーム
  2. python

python 3.x エラー 'generator' オブジェクトに 'next' 属性がありません。

2022-02-20 11:30:08

Pythonでフィボナッチ級数を生成する

def fab(max):
  n,a,b=0,0,1
  while n<max:
    yield b
    a,b=b,a+b
    n=n+1

for n in fab(5):
  print(n)

正常に動作する
以下の方法で実行した場合
f=fab(5)
f.next()
次のようなエラーが発生します。
トレースバック(直近の呼び出し)。
  ファイル "<pyshell#32>", 行 1, in <module>
    f.next()
AttributeError: 'generator'オブジェクトには'next'属性がありません。

この理由は、python 3.xでは、ジェネレータのnext(yieldキーワードがあればジェネレータ関数として認識される)が__next__になっており、以前のバージョンのpython 3.xではnextはメソッドであったためである

以下のように正常に動作します。
f=fab(5)
f.__next__()