Python で __iter__() 関数を使用してオブジェクトの反復可能性を定義する方法

WBOY
リリース: 2023-08-21 22:05:11
オリジナル
789 人が閲覧しました

Python で __iter__() 関数を使用してオブジェクトの反復可能性を定義する方法

Python で __iter__() 関数を使用してオブジェクトの反復可能性を定義する方法

Python では、反復可能オブジェクトとは、通過できるオブジェクトを指します。イテレータ 。オブジェクトが反復可能オブジェクトになるには、そのクラスが __iter__() 関数を実装する必要があります。この関数は、__next__() メソッドを実装する反復子オブジェクトを返します。

__iter__() 関数の基本形式は次のとおりです。

def __iter__(self):
    # 返回一个迭代器对象
    return self
ログイン後にコピー

次の例は、__iter__() 関数を使用してオブジェクトの反復可能性を定義する方法を示しています。

class FibonacciSequence:
    def __init__(self, n):
        self.n = n
        self.a, self.b = 0, 1
        self.count = 0
    
    def __iter__(self):
        # 返回一个迭代器对象
        return self
    
    def __next__(self):
        if self.count < self.n:
            self.a, self.b = self.b, self.a + self.b
            self.count += 1
            return self.a
        else:
            raise StopIteration

n = int(input("请输入斐波那契数列的长度:"))
fib = FibonacciSequence(n)

print("斐波那契数列前", n, "个数字为:")
for num in fib:
    print(num)
ログイン後にコピー

上の例では、フィボナッチ数列を生成するために FibonacciSequence というクラスを定義しました。クラス初期化メソッド __init__() では、生成されるフィボナッチ数列の長さを表すパラメーター n を渡します。 __iter__() 関数は反復子オブジェクト self を返し、__next__() メソッドを実装する反復子オブジェクトは for ループを使用して走査できます。

__next__() メソッドでは、self.count が n 未満の場合に、self.count を使用して、現在生成されているフィボナッチ数列の長さ (つまり、返された数値の数) を記録します。 , フィボナッチ数列のルールに従って次の数値を生成し、self.b を self.a に代入し、self.a と self.b の合計を self.b に代入し、self.count に 1 を加えます。 self.count が n に等しい場合、反復子の終了マークである StopIteration 例外をスローします。

最後に、メイン プログラムで、n の値を入力して FibonacciSequence オブジェクト fib をインスタンス化し、それを for ループに渡して走査し、フィボナッチ数列の最初の n を 1 つずつ数値で出力します。

上記の例を通じて、__iter__() 関数を使用してオブジェクトの反復可能性を定義する方法を確認できます。オブジェクトが __iter__() 関数を実装し、 __next__() メソッドを実装するイテレータ オブジェクトを返す限り、for ループやその他のメソッドを使用してそれを反復処理できます。このメソッドを使用すると、カスタム オブジェクトを Python の組み込みリスト、辞書、その他のオブジェクトと同様にトラバースできるようになります。

以上がPython で __iter__() 関数を使用してオブジェクトの反復可能性を定義する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート