ジェネレータ
次のコードを実行したときの出力として、正しいものを1つ選べ。
def reverse(data):
for i in range(len(data) - 1, -1, -1):
yield data[i]
print("".join(reverse("golf")))
- A
flog - B
golf - C
<generator object ...> - D
f l o g
正解と解説を見る
正解:A
yield を使う関数はジェネレータで、値を1つずつ返すイテレータを作る。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `def reverse(data):` | — |
| 2 | `print("".join(reverse("golf")))` | — |
| 3 | └ `for i in range(len(data) - 1, -1, -1):` | i = 3, data = 'golf' |
| 4 | └ `yield data[i]` | data = 'golf', i = 3 |
| 5 | └ `for i in range(len(data) - 1, -1, -1):` | i = 2, data = 'golf' |
| 6 | └ `yield data[i]` | data = 'golf', i = 2 |
| 7 | └ `for i in range(len(data) - 1, -1, -1):` | i = 1, data = 'golf' |
| 8 | └ `yield data[i]` | data = 'golf', i = 1 |
| 9 | └ `for i in range(len(data) - 1, -1, -1):` | i = 0, data = 'golf' |
| 10 | └ `yield data[i]` | data = 'golf', i = 0 |
| 11 | └ `for i in range(len(data) - 1, -1, -1):` | i = 0, data = 'golf' |
| 結果 | 実際の出力 | flog |
- A
正しい。yield を使う関数はジェネレータになり、呼び出されるたびに次の値を1つずつ返す。ここでは文字列を末尾から1文字ずつ返す。
- B
誤り。末尾から順に取り出している。
- C
誤り。
"".join()がジェネレータから値を取り出して連結する。 - D
誤り。空文字列で連結しているので、間に空白は入らない。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。