teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

形式改善

2020/11/04 12:43

投稿

nanata_umu
nanata_umu

スコア1

title CHANGED
File without changes
body CHANGED
@@ -46,11 +46,7 @@
46
46
  ### 試したこと
47
47
 
48
48
  pythonの絵本から持ってきたコードです
49
- ```ここに言語を入力
49
+
50
- g=gen(10)
51
- print(next(g)) 
52
- print(next(g))
53
- ```
54
50
  print(next(g))がどのように処理され値が呼び出されるのかいまいちわかりません。
55
51
 
56
52
 

1

文法の修正

2020/11/04 12:42

投稿

nanata_umu
nanata_umu

スコア1

title CHANGED
@@ -1,1 +1,1 @@
1
- pythonのジェネレータ使い方に困ってい
1
+ pythonのジェネレータ関数 基礎的な使い方がわかりせん
body CHANGED
@@ -1,13 +1,9 @@
1
- ### 前提・実現したいこと
2
-
3
1
  pythonのジェネレータの使い方を知りたいです
4
2
 
5
- ### 発生している問題・エラーメッセージ
6
3
 
7
4
 
8
5
 
9
- ### 該当のソースコード
6
+ ```ここに言語を入力
10
-
11
7
  def gen(maxnum):
12
8
  base=0
13
9
  i=0
@@ -20,23 +16,89 @@
20
16
  i+=1
21
17
 
22
18
  g=gen(10)
19
+ #1
23
20
  print(next(g))
21
+ #2
24
22
  print(next(g))
25
23
  g.send(10)
24
+ #3
26
25
  print(next(g))
26
+ #4
27
27
  print(next(g))
28
28
  g.send(0)
29
+ #5
29
30
  print(next(g))
31
+ #6
30
32
  print(next(g))
33
+ #7
31
34
  print(next(g))
32
-
35
+ ```
36
+ 実行結果
37
+ ```ここに言語を入力
38
+ 0
39
+ 1
40
+ 12
41
+ 13
42
+ 4
43
+ 5
44
+ 6
45
+ ```
33
46
  ### 試したこと
34
47
 
48
+ pythonの絵本から持ってきたコードです
49
+ ```ここに言語を入力
50
+ g=gen(10)
51
+ print(next(g)) 
52
+ print(next(g))
53
+ ```
35
- next(),send(),yieldはどのように使うのか知りたです
54
+ print(next(g))どのように処理され値が呼び出されるのかいまいちわかりません
36
- 出来ればソースコードの解説をお願いします。
55
+
37
56
 
57
+ ```ここに言語を入力
58
+ def gen(maxnum):
59
+ base = 0
60
+ i = 0
38
- 関数、while文はわかる前提で説明してもらって大丈夫です。
61
+ while i < maxnum:
62
+ o=(yield base + i)
63
+
64
+ if o is not None:
65
+ base = o
66
+ else:
67
+ i += 1
68
+ ```
39
69
 
70
+ 私なりには #1 print(next(g)) に呼び出しされ g=gen(10) が処理され上記defの関数の式が開始されて、
71
+ gen(maxnum)のところに(10)が代入され
72
+ while i < maxnum(10):となり、while文が処理されると考えていいのでしょうか?
73
+
74
+ ```ここに言語を入力
75
+ while i < maxnum:
76
+ o=(yield base + i)
77
+
78
+ if o is not None:
79
+ base = o
80
+ else:
81
+ i += 1
82
+ ```
83
+
84
+ ここで処理では o=(yield base + i) で中断し呼び出し元にに戻ると記載されているのですが
85
+ o= base + iが戻り値になるのですか?
86
+
87
+
88
+ ```ここに言語を入力
89
+ if o is not None:
90
+ base = o
91
+ else:
92
+ i += 1
93
+ ```
94
+ 次に#2 print(next(g))が上記のコードから再開されるのでしょうか?
95
+ if o is not None: の意味はわかるのですがo変数がNoneになる場合とならない場合の処理を教えてください。
96
+
97
+ ```ここに言語を入力
98
+ g.send(10)
99
+ ```
100
+ send()メゾットはどこに値を送るのでしょうか?
101
+
40
102
  ### 補足情報(FW/ツールのバージョンなど)
41
103
 
42
- ここにより詳細な情報を記載してください
104
+ 情報不足ですみません