回答編集履歴

2

追記

2019/02/09 07:58

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -52,6 +52,10 @@
52
52
 
53
53
 
54
54
 
55
+ **追記: ** 改めて確かめると、rangeオブジェクトもイテレータじゃないですね。知らなかったです。
56
+
57
+
58
+
55
59
  ---
56
60
 
57
61
  リストやタプルなど、反復可能な要素は**イテラブル**と呼ばれます。
@@ -62,4 +66,24 @@
62
66
 
63
67
  ややこしいのは、イテレータもイテラブルであることです。
64
68
 
65
- 任意のイテレータitは、iter(it)に対して自分自身を返します。
69
+ 任意のイテレータitは、iter(it)に対して自分自身を返します。**(註)**
70
+
71
+
72
+
73
+ **註:**
74
+
75
+ その気になればそのルールに反する独自のイテレータを作るのは可能です。
76
+
77
+ ただしやるべきでは無いです。
78
+
79
+
80
+
81
+ > ######iterator
82
+
83
+ ...略...
84
+
85
+ イテレータは、そのイテレータオブジェクト自体を返す `__iter__()` メソッドを実装しなければならないので、イテレータは他の iterable を受理するほとんどの場所で利用できます。
86
+
87
+
88
+
89
+ 引用元: [Pythonドキュメント » 用語集](https://docs.python.jp/3/glossary.html#term-iterator)

1

追記

2019/02/09 07:58

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -9,6 +9,46 @@
9
9
 
10
10
 
11
11
  listはイテレータを返しません。
12
+
13
+ 実際にリストオブジェクトをnext関数に放り込むと例外が発生することが確認できます。
14
+
15
+ ```Python
16
+
17
+ >>> lst = [1, 2, 3]
18
+
19
+ >>> next(lst)
20
+
21
+ Traceback (most recent call last):
22
+
23
+ File "<stdin>", line 1, in <module>
24
+
25
+ TypeError: 'list' object is not an iterator
26
+
27
+ >>>
28
+
29
+ >>> it = iter(lst)
30
+
31
+ >>> next(it)
32
+
33
+ 1
34
+
35
+ >>> next(it)
36
+
37
+ 2
38
+
39
+ >>> next(it)
40
+
41
+ 3
42
+
43
+ >>> next(it)
44
+
45
+ Traceback (most recent call last):
46
+
47
+ File "<stdin>", line 1, in <module>
48
+
49
+ StopIteration
50
+
51
+ ```
12
52
 
13
53
 
14
54