【Python】collections.abcモジュールのIterableでオブジェクトがイテラブルかどうかを判定する

スポンサーリンク

collections.abcモジュールのIterableでオブジェクトがイテラブル(要素を1つ以上持つことができるオブジェクト)かどうかを判定してみます。

なお、collections.abcはPythonの標準ライブラリで事前にインストールする必要はありません。

■Python

今回のPythonのバージョンは、「3.10.9」を使用しています。(Windows11)(pythonランチャーでの確認)

■collections.abcモジュールのIterableでオブジェクトがイテラブルかどうかを判定する

では、collections.abcモジュールのIterableでオブジェクトがイテラブルかどうかを判定するスクリプトを書いていきます。

■コード

from collections.abc import Iterable

def print_elements(iterable_obj):
    if isinstance(iterable_obj, Iterable):
        for item in iterable_obj:
            print(item)
    else:
        print("This object is not iterable.")

# リストを使ってテスト
sample_list = [1, 2, 3, 4, 5]
print("リストの要素:")
print_elements(sample_list)

# タプルを使ってテスト
sample_tuple = (10, 20, 30)
print("タプルの要素:")
print_elements(sample_tuple)

# 辞書を使ってテスト
sample_dict = {'a': 100, 'b': 200, 'c': 300}
print("辞書の要素:")
print_elements(sample_dict)

# 文字列を使ってテスト
sample_string = "Hello, Python!"
print("文字列の要素:")
print_elements(sample_string)

# 整数を使ってテスト
sample_int = 12345
print("整数の要素:")
print_elements(sample_int)

まずcollections.abcモジュールからIterableクラスをインポートします。これにより、イテラブルなオブジェクトを判定するためのクラスを利用できるようになります。

次にprint_elementsという関数を定義します。引数,パラメータとしてiterable_objを受け取ります。この関数は、渡されたオブジェクトがイテラブルであれば、その要素を順番に表示します。そうでない場合は、「This object is not iterable.」というメッセージを表示します。

関数の動作を具体的に説明すると、isinstance(iterable_obj, Iterable)は、渡されたiterable_objがIterableクラスのインスタンス(すなわちイテラブル)かどうかをチェックします。もし、iterable_objがイテラブルな場合は、forループを使ってiterable_objの各要素を順番に取り出し、print()関数でそれぞれの要素を表示します。
else節は、iterable_objがイテラブルでない場合に実行されます。このとき、「This object is not iterable.」というメッセージを表示します。

なお、テストコードでは、リスト、タプル、辞書、文字列の4つの異なるオブジェクトをテストしています。リストとタプルはイテラブルなので、要素が順番に表示されます。辞書はキーをイテラブルとして扱います。文字列も各文字がイテラブルなので、文字が1つずつ表示されます。しかし、整数はイテラブルではないので、例外が発生し、関数がエラーメッセージを出力します。

■実行・検証

このスクリプトを「main_test.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、リスト、タプル、辞書、文字列、整数がイテラブル(要素を1つ以上持つことができるオブジェクト)かどうかを判定し、判定結果を出力させることができました。

コメント

タイトルとURLをコピーしました