回答編集履歴
3
誤記
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
追記: コメントでご指摘いただいたStopIterationに関して不自然と思える部分、MyIteratorの__next__の定義がおかしかった点を訂正いたしました。
|
1
|
+
追記: コメントでご指摘いただいたStopIterationに関して不自然と思える部分、MyIteratorの`__next__`の定義がおかしかった点を訂正いたしました。
|
2
2
|
|
3
3
|
ご指摘ありがとうございました。> hayataka2049さん、quiquiさん
|
4
4
|
|
2
StopIterationへの配慮を追加
test
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
追記: コメントでご指摘いただいたStopIterationに関して不自然と思える部分、MyIteratorの__next__の定義がおかしかった点を訂正いたしました。
|
2
|
+
|
3
|
+
ご指摘ありがとうございました。> hayataka2049さん、quiquiさん
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
---
|
8
|
+
|
1
9
|
for文の内部のメカニズムを考えると以下のようなヘンテコなコードが思い浮かびました。実際にやってみると動きました(Python3)。しかし自分は~~こんなコードを見たらプログラマーの正気を疑う~~このようなコードは推奨できないと思います...
|
2
10
|
|
3
11
|
|
@@ -16,7 +24,7 @@
|
|
16
24
|
|
17
25
|
next(loop_iter) # さらに5も飛ばす
|
18
26
|
|
19
|
-
|
27
|
+
# 追記: ご指摘いただいたとおり、next(loop_iter, None)の方がよかったです。
|
20
28
|
|
21
29
|
# ==>
|
22
30
|
|
@@ -84,19 +92,25 @@
|
|
84
92
|
|
85
93
|
def __next__(self, default=None):
|
86
94
|
|
87
|
-
if default is None:
|
95
|
+
# if default is None:
|
88
96
|
|
89
|
-
return next(self.iterator)
|
97
|
+
# return next(self.iterator)
|
90
98
|
|
91
|
-
else:
|
99
|
+
# else:
|
92
100
|
|
93
|
-
try:
|
101
|
+
# try:
|
94
102
|
|
95
|
-
return next(self.iterator)
|
103
|
+
# return next(self.iterator)
|
96
104
|
|
97
|
-
except StopIteration:
|
105
|
+
# except StopIteration:
|
98
106
|
|
99
|
-
return default
|
107
|
+
# return default
|
108
|
+
|
109
|
+
# 上記実装はビルトイン関数nextの機能を誤って__next__に持たせてしまっており
|
110
|
+
|
111
|
+
# 誤りだったと思います。単に以下のようにする方が妥当と思います。
|
112
|
+
|
113
|
+
self.iterator.__next__()
|
100
114
|
|
101
115
|
|
102
116
|
|
@@ -104,13 +118,15 @@
|
|
104
118
|
|
105
119
|
for _ in range(n):
|
106
120
|
|
107
|
-
try:
|
121
|
+
# try:
|
108
122
|
|
109
|
-
next(self.iterator)
|
123
|
+
# next(self.iterator)
|
110
124
|
|
111
|
-
except StopIteration:
|
125
|
+
# except StopIteration:
|
112
126
|
|
113
|
-
break
|
127
|
+
# break
|
128
|
+
|
129
|
+
next(self.iterator, None) # ご指摘から、よりシンプルな記述に変更しました
|
114
130
|
|
115
131
|
|
116
132
|
|
1
表現変更
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
for文の内部のメカニズムを考えると以下のようなヘンテコなコードが思い浮かびました。実際にやってみると動きました(Python3)。しかし自分はこんなコードを見たらプログラマーの正気を疑うと思います...
|
1
|
+
for文の内部のメカニズムを考えると以下のようなヘンテコなコードが思い浮かびました。実際にやってみると動きました(Python3)。しかし自分は~~こんなコードを見たらプログラマーの正気を疑う~~このようなコードは推奨できないと思います...
|
2
2
|
|
3
3
|
|
4
4
|
|