質問編集履歴

2

形式改善

2020/11/04 12:43

投稿

nanata_umu
nanata_umu

スコア1

test CHANGED
File without changes
test CHANGED
@@ -94,15 +94,7 @@
94
94
 
95
95
  pythonの絵本から持ってきたコードです
96
96
 
97
- ```ここに言語を入力
98
97
 
99
- g=gen(10)
100
-
101
- print(next(g)) 
102
-
103
- print(next(g))
104
-
105
- ```
106
98
 
107
99
  print(next(g))がどのように処理され値が呼び出されるのかいまいちわかりません。
108
100
 

1

文法の修正

2020/11/04 12:42

投稿

nanata_umu
nanata_umu

スコア1

test CHANGED
@@ -1 +1 @@
1
- pythonのジェネレータ使い方に困ってい
1
+ pythonのジェネレータ関数 基礎的な使い方がわかりせん
test CHANGED
@@ -1,22 +1,14 @@
1
- ### 前提・実現したいこと
2
-
3
-
4
-
5
1
  pythonのジェネレータの使い方を知りたいです
6
2
 
7
3
 
8
4
 
9
- ### 発生している問題・エラーメッセージ
5
+
10
-
11
-
12
-
13
-
14
-
15
-
16
-
6
+
7
+
8
+
9
+
10
+
17
- ### 該当のソースコード
11
+ ```ここに言語を入力
18
-
19
-
20
12
 
21
13
  def gen(maxnum):
22
14
 
@@ -42,37 +34,169 @@
42
34
 
43
35
  g=gen(10)
44
36
 
37
+ #1
38
+
45
- print(next(g))
39
+ print(next(g))
40
+
41
+ #2
46
42
 
47
43
  print(next(g))
48
44
 
49
45
  g.send(10)
50
46
 
47
+ #3
48
+
51
- print(next(g))
49
+ print(next(g))
50
+
51
+ #4
52
52
 
53
53
  print(next(g))
54
54
 
55
55
  g.send(0)
56
56
 
57
+ #5
58
+
57
- print(next(g))
59
+ print(next(g))
60
+
58
-
61
+ #6
62
+
59
- print(next(g))
63
+ print(next(g))
64
+
60
-
65
+ #7
66
+
61
- print(next(g))
67
+ print(next(g))
68
+
62
-
69
+ ```
70
+
63
-
71
+ 実行結果
72
+
73
+ ```ここに言語を入力
74
+
75
+ 0
76
+
77
+ 1
78
+
79
+ 12
80
+
81
+ 13
82
+
83
+ 4
84
+
85
+ 5
86
+
87
+ 6
88
+
89
+ ```
64
90
 
65
91
  ### 試したこと
66
92
 
67
93
 
68
94
 
95
+ pythonの絵本から持ってきたコードです
96
+
97
+ ```ここに言語を入力
98
+
99
+ g=gen(10)
100
+
101
+ print(next(g)) 
102
+
103
+ print(next(g))
104
+
105
+ ```
106
+
107
+ print(next(g))がどのように処理され値が呼び出されるのかいまいちわかりません。
108
+
109
+
110
+
111
+
112
+
113
+ ```ここに言語を入力
114
+
115
+ def gen(maxnum):
116
+
117
+ base = 0
118
+
119
+ i = 0
120
+
121
+ while i < maxnum:
122
+
123
+ o=(yield base + i)
124
+
125
+
126
+
127
+ if o is not None:
128
+
129
+ base = o
130
+
131
+ else:
132
+
133
+ i += 1
134
+
135
+ ```
136
+
137
+
138
+
139
+ 私なりには #1 print(next(g)) に呼び出しされ g=gen(10) が処理され上記defの関数の式が開始されて、
140
+
141
+ gen(maxnum)のところに(10)が代入され
142
+
143
+ while i < maxnum(10):となり、while文が処理されると考えていいのでしょうか?
144
+
145
+
146
+
147
+ ```ここに言語を入力
148
+
149
+ while i < maxnum:
150
+
151
+ o=(yield base + i)
152
+
153
+
154
+
155
+ if o is not None:
156
+
157
+ base = o
158
+
159
+ else:
160
+
161
+ i += 1
162
+
163
+ ```
164
+
165
+
166
+
167
+ ここで処理では o=(yield base + i) で中断し呼び出し元にに戻ると記載されているのですが
168
+
169
+ o= base + iが戻り値になるのですか?
170
+
171
+
172
+
173
+
174
+
175
+ ```ここに言語を入力
176
+
177
+ if o is not None:
178
+
179
+ base = o
180
+
181
+ else:
182
+
183
+ i += 1
184
+
185
+ ```
186
+
187
+ 次に#2 print(next(g))が上記のコードから再開されるのでしょうか?
188
+
189
+ if o is not None: の意味はわかるのですがo変数がNoneになる場合とならない場合の処理を教えてください。
190
+
191
+
192
+
193
+ ```ここに言語を入力
194
+
195
+ g.send(10)
196
+
197
+ ```
198
+
69
- next(),send(),yieldはどのに使うの知りたいです。
199
+ send()メゾットはどこに値を送るでしょうか
70
-
71
- 出来ればソースコードの解説をお願いします。
72
-
73
-
74
-
75
- 関数、while文はわかる前提で説明してもらって大丈夫です。
76
200
 
77
201
 
78
202
 
@@ -80,4 +204,4 @@
80
204
 
81
205
 
82
206
 
83
- ここにより詳細な情報を記載してください
207
+ 情報不足ですみません