回答編集履歴

3

誤記

2019/01/07 12:13

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -1,4 +1,4 @@
1
- 追記: コメントでご指摘いただいたStopIterationに関して不自然と思える部分、MyIteratorの__next__の定義がおかしかった点を訂正いたしました。
1
+ 追記: コメントでご指摘いただいたStopIterationに関して不自然と思える部分、MyIteratorの`__next__`の定義がおかしかった点を訂正いたしました。
2
2
 
3
3
  ご指摘ありがとうございました。> hayataka2049さん、quiquiさん
4
4
 

2

StopIterationへの配慮を追加

2019/01/07 12:13

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

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

表現変更

2019/01/07 12:12

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -1,4 +1,4 @@
1
- for文の内部のメカニズムを考えると以下のようなヘンテコなコードが思い浮かびました。実際にやってみると動きました(Python3)。しかし自分はこんなコードを見たらプログラマーの正気を疑うと思います...
1
+ for文の内部のメカニズムを考えると以下のようなヘンテコなコードが思い浮かびました。実際にやってみると動きました(Python3)。しかし自分は~~こんなコードを見たらプログラマーの正気を疑う~~このようなコードは推奨できないと思います...
2
2
 
3
3
 
4
4