質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

817閲覧

Python3のイテラブルなオブジェクトの定義

sabx

総合スコア200

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2グッド

1クリップ

投稿2018/02/14 02:12

お聞きしたいこと

Python3を勉強中なのですが、参考書やWebで「イテラブルなオブジェクト」という表現が出てきます。
イテラブルなオブジェクトの具体的な例として、 list, range, 文字列, dict 等々と
表現されているのですが、等々が list, range, 文字列, dict 以外に何が存在しているのか気になっています。

個人的には、 __iter()__ メソッドが実装されているクラスから作成されたインスタンスが、
イテラブルなオブジェクトという理解ではありますが、間違っていないか教えていただけないでしょうか。

YouheiSakurai, yag1kaz👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/14 02:27

他の例についてですが、組み込みの型で言えばset, tuple、それからジェネレーターは全てイテラブルなオブジェクトですね。
退会済みユーザー

退会済みユーザー

2018/02/14 02:35

ファイルオブジェクトもイテラブルですね。file_obj = open(text, "r")
退会済みユーザー

退会済みユーザー

2018/02/14 02:46

bytes, bytesarray, arrayなどもありますね。イテラブルなものは非常に多いので、継ぎはぎだらけのコメントですみません。
guest

回答3

0

ベストアンサー

用語の定義を知りたい時は公式ドキュメントの用語集または言語仕様を探すのが一番です。
Python 3.6.3ドキュメントの用語集のiterableの項

iterable

An object capable of returning its members one at a time. Examples of iterables include all sequence types (such as list, str, and tuple) and some non-sequence types like dict, file objects, and objects of any classes you define with an iter() method or with a getitem() method that implements Sequence semantics.

イテラブルなオブジェクトとは(意訳)
1,シーケンス型
2,非シーケンス型
3,__iter()__を定義しているクラス
の3種類ある

■シーケンス型は
a,基本的なシーケンス型
list, tuple, range
b,テキストシーケンス型
str
c,バイナリシーケンス型
bytes, bytearray, memoryview
の3種類

■非シーケンス型
dict, ファイルオブジェクト

があります。

投稿2018/02/14 04:06

umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sabx

2018/02/14 05:58

ご回答ありがとうございます! 公式ドキュメントの引用等があり、とても参考になりましたので、 ベストアンサーとさせていただきます!
guest

0

「イテラブル」は「iterable」で「反復可能な」です。
for文などで反復できるもの全部ということでしょう。

ですので、__next__(イテレータ)の他yield(ジェネレータ)などが含まれます。

(調べてみたら結局みんな__iter__が定義されていました。)

そして、
https://qiita.com/gyu-don/items/0f38dfb48fc7dabbb2ae
ここが詳しかった…

英語を読むことが苦ではなければ、
http://nvie.com/posts/iterators-vs-generators/
https://stackoverflow.com/questions/4844010/python-the-mechanism-behind-list-comprehension


dkato0077さんの「ファイルオブジェクト」は__iter__を持っています。

投稿2018/02/14 02:44

編集2018/02/14 03:03
mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/14 02:56

質問者さん向けのコメントになりますが、ジェネレータについては最初は深入りしないことをお勧めします。割りと闇・・・もとい奥が深いです。
mkgrei

2018/02/14 03:00

ジェネレータは評価が遅延されるので、うまく設計すれば無駄のないコードになりますが、使い方を誤ると副作用で想定外のバグに悩まされますね。 典型的なパターン以外で使うと難解なコードになって保守不可になります。
guest

0

私もそのような理解です。

加えてジェネレータもあるみたいですね。
Pythonのイテレータとジェネレータ

投稿2018/02/14 02:26

編集2018/02/14 02:30
yag1kaz

総合スコア253

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問